2017-03-02 30 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

啊哈!那样做了。谢谢! –

相关问题