我正在努力让这个问题发挥作用。我有三张桌子,我想查询一下红色区域。
每个圆都是一张结构不同的桌子。我已经处理了很多内部连接的组合,但是我特别不能得到所有的红色区域。
A付款:IDPayment,IDInvoice,Amount,Date。
B发票:发票号,金额日期。
本票:本票,本票,金额,日期。
到目前为止…
选择b.idInvoice、a.idPayment、c.idNote from(a.idInvoice b inner join payments a on a.idInvoice=b.idInvoice)left outer join promissoryNotes c on c.idInvoice=b.idInvoice order by idInvoice。
不太管用
有什么建议吗?
最佳答案
你已经很接近了——另一个OUTER JOIN
和一些WHERE
标准可以做到:
SELECT B.idInvoice, A.idPayment, C.idNote
FROM Invoice b
LEFT JOIN payments a ON a.idInvoice=b.idInvoice
LEFT JOIN PromissoryNotes c ON c.idInvoice=b.idInvoice
WHERE a.idInvoice IS NOT NULL
OR c.idInvoice IS NOT NULL
ORDER BY B.idInvoice
这基本上就是给我从表B得到的所有结果,在表A或表C中有一个匹配项。
Condensed SQL Fiddle Demo