2012-12-19 123 views
3

這是兩個表。左連接無結果

tbl_Invoice

Invoice

tbl_Payment

Payment

我要的是Pending Invoices由一個特定的客戶端。

現有查詢是如下:

Select * from tbl_Invoice I 
    left join tbl_payment P on I.client_id = P.client_id 
    left join tbl_client C on I.client_id = C.client_id 
    where I.invoice_Id not in (P.invoice_Id) 
    and I.client_id = 8 

但它給空白結果監守支付表是空白。

回答

7

你需要從WHEREON移動條件:

Select * from tbl_Invoice I 
left join tbl_payment P on (I.client_id = P.client_id 
AND p.invoice_id <> I.invoice_Id) 
left join tbl_client C on I.client_id = C.client_id 

WHERE I.client_id = 5 
+0

不錯.. !!你能解釋一下嗎? –

+0

'I.invoice_Id不在(P.invoice_Id)中'如果tbl_payment爲空則返回'NULL'。邏輯語句中'NULL'被視爲FALSE;所以你得到空的結果集。一般來說,當你使用'LEFT JOIN'時,你不想把'left join''放入'where',因爲它將你的'left join'變成'inner'。異常 - 這是可以和常見的做法,使用'WHERE left_joined_table.primary_key_column IS NULL'來獲取父表中的所有記錄沒有詳細信息... – a1ex07

+0

+1的解釋..謝謝 –