2012-04-16 56 views
1

基本上我使用LEFT JOIN表來獲取屬於PERSON的INVOICE記錄。有條件的INNER JOIN返回非預期的結果

快速查看錶格及相關記錄。

table INVOICES table GIGS  table BIDS    table PEOPLE 
---------------- ---------------- ----------------------- ---------------- 
id | gig_id  id | bid_id  id | gig_id | person_id id   
---------------- ---------------- ----------------------- ---------------- 
1 | 1   1 | 1    1 | 1  | 1   1 
        2 | 2    2 | 1  | 2   2 

和我的連接查詢......

SELECT invoices.* FROM invoices 
INNER JOIN gigs ON gigs.id = invoices.gig_id 
INNER JOIN bids ON bids.gig_id = gigs.id 
INNER JOIN people ON people.id = bids.person_id 
WHERE people.id = 2 
GROUP BY invoices.id 

,並返回結果...

INVOICE RESULT 
-------------- 
id 
-------------- 
1 

事實是,people.id=2有任何發票但上面的連接查詢返回結果,就像它們一樣。如果一個人沒有任何發票,我如何確保它回覆空?

對此的任何提示非常感謝!

+1

恐怕你已經到簡體這個問題不存在。您現在的查詢無法運行,因爲出價加入會引用出價沒有的字段。團隊也不應該在那裏。 – HLGEM 2012-04-16 14:15:47

+0

@HLGEM,謝謝你對我錯誤的理解。我忘了在表格出價中加入「gig_id」列。 – chadwtaylor 2012-04-16 15:38:20

回答

2

使用LEFT OUTER JOIN而不是INNER JOINPeople表開始(在一個有你想看到所有的數據)

事情是這樣的:

SELECT 
    People.Id, 
    invoices.* 
FROM 
    People  
LEFT OUTER JOIN  -- this here *might* be an INNER JOIN 
    bids ON people.person_id = bids.person_id 
LEFT OUTER JOIN  -- this here *might* be an INNER JOIN 
    gigs ON bids.gig_id = gigs.id 
LEFT OUTER JOIN 
    invoices ON gigs.id = invoices.gig_id 
GROUP BY 
    invoices.id