2013-10-07 63 views
0

我有一個sql查詢連接user_id幾個表,問題是我希望看到這些表中的所有數據。有SQL查詢不是組結果

目前我正在查詢用戶表和付款表,並根據user_id加入他們。

我似乎只得到每個user_id一個結果,現在我知道這是什麼意思發生,但如何(如果可能),我能夠顯示所有的數據從付款表(即我想看到顯示用戶所做的各種付款的多個用戶ID)。

我目前使用左連接,我認爲這可能是問題,但切換它仍然沒有顯示我正在尋找的結果。

這我我當前的加入:

from user u 
left join u_subscription us 
on u.user_id = us.user_id 
left join u_detail ud 
on u.user_id = ud.user_id 

任何幫助將非常感激。

在此先感謝

河畔

完整的SQL查詢:

select u.user_id as 'prop:User id', u.user_username as 'prop:username', u.user_email as 'Identity',u.user_created as 'Timestamp', us.user_subscription_expires as 'prop:Expires on', us.user_subscription_payment_provider as 'prop:Payment provider', us.user_subscription_modified, ud.user_detail_signup_country_iso3 as 'prop:Country' 

from user u 
left outer join user_subscription us 
on u.user_id = us.user_subscription_user_id 
left outer join user_detail ud 
on u.user_id = ud.user_detail_user_id 
+4

你能顯示你正在使用的完整查詢嗎?這聽起來像你可能有'GROUP BY u.user_id',但沒有完整的查詢,我們不能肯定地說。 – newfurniturey

+0

請顯示完整查詢。 –

+0

很快!我嘗試了左外連接,沒有運氣。我沒有在任何地方使用羣組。 – nad

回答

0

我發現你的查詢沒有缺陷。它應該按預期工作。

我懷疑有不多於一行每個用戶subscriptiondetail表中。這就是爲什麼你的left join每個用戶只產生一行(如果它是內連接,它將產生最多每行用戶一行)。

+0

這就是它,對不起,我沒有意識到!數據庫已更改並覆蓋用戶信息,而不是添加另一行。感謝您的所有其他建議 – nad

0

我建議用另一種方法:

select 
    'your selected columns' 
from 
    user u, 
    u_subscription us, 
    u_detail ud 
where 
    u.user_id = us.user_id and 
    u.user_id = ud.user_id 

這個作品就像join方法,但對我來說,這種方法使查詢更清晰,更容易理解..希望它有幫助!

+0

這在語法上相當於將LEFT OUTER連接切換到INNER JOIN,所以不能解決問題。 – GarethD

+1

此外,您提出的方法雖然沒有錯,但已超過20年,並且在ANSI 1992中被問題中使用的顯式連接語法取代。我不想代表太多人說話,但我認爲你們認爲自己更清楚,更容易理解,因此是少數派。 [本文](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx)給出了更多的理由來切換比我可以在評論 – GarethD

+0

啊..我明白了..謝謝@GarethD!我學到了很多東西!我通常認爲我的方法是更好的方法,但現在我知道了。文章非常豐富!感謝您的更正.. – catzilla

0

由於您正在尋找某些細節/付款,請使用THAT表作爲查詢的基礎,然後加入到用戶表中,因爲詳細信息僅基於用戶存在...但是,您可以 - 如果有條件的話加入訂閱。類似於

select 
     u.*, 
     ud.*, 
     us.* 
    from 
     u_detail ud 
     join user u 
      on ud.user_id = u.user_id 
     left join u_subscription us 
      on ud.user_id = us.user_id 

由於用戶標識在用戶詳細信息中與用戶表相同,因此只需使用相同的參數即可加入訂閱表。我通常不會在字段中使用「*」,但可以從中選擇您想要的內容。