2017-03-02 36 views
0

我有三個表,invoice itrans tarnotes a。所有三個表都有一列reference_num。記錄將存在於i,t以及有時爲a。我想拉it中的所有記錄,並且如果它在a中有記錄,則顯示第reason列中的數據。SQL左連接導致記錄不從第二個表中提取

另外,我只想要DISTINCT結果。我目前有以下內容,但它只返回所有三個中存在的記錄。如果a中沒有記錄,它不會從it中提取記錄,並且顯示爲reason的記錄爲空,但記錄完全沒有被取消。有什麼協助嗎?

SELECT DISTINCT i.BT_ID, 
    i.ST_ID, 
    i.REFERENCE_NUM, 
    i.INVOICE_DATE, 
    i.BALANCE, 
    t.GL_ACCOUNT, 
    a.REASON 
FROM Invoice i 
INNER JOIN Trans t ON i.REFERENCE_NUM = t.INVOICE_REFERENCE_NUM 
LEFT OUTER JOIN ARNOTES a ON t.INVOICE_REFERENCE_NUM = a.INVOICE_NUM 
WHERE (i.BALANCE > 0) 
    AND (t.GL_ACCOUNT <> '') 
    AND (t.TRANSACTION_TYPE = 'dist') 
    AND (NOT (a.REASON LIKE '%COLLECTIONS%')) 

回答

2

您的not a.REASON like '%COLLECTIONS%'正在將left join變爲內部聯接。將其移至ON子句,如下所示:

select distinct i.BT_ID, 
    i.ST_ID, 
    i.REFERENCE_NUM, 
    i.INVOICE_DATE, 
    i.BALANCE, 
    t.GL_ACCOUNT, 
    a.REASON 
from Invoice i 
inner join Trans t on i.REFERENCE_NUM = t.INVOICE_REFERENCE_NUM 
left outer join ARNOTES a on t.INVOICE_REFERENCE_NUM = a.INVOICE_NUM 
    and a.REASON not like '%COLLECTIONS%' 
where i.BALANCE > 0 
    and t.GL_ACCOUNT <> '' 
    and t.TRANSACTION_TYPE = 'dist' 
+0

啊哈!那樣做了。謝謝! –

相關問題