我有四个表,一个是主发票表,另外三个是来自不同地区的发票。我想要实现的是仅从“主发票”表中返回记录,其中发票编号在其他三个表之一中。例如:
SELECT * FROM Invoice_Master M
LEFT OUTER JOIN Invoice_North N
ON M.InvNo = N.InvNo
LEFT OUTER JOIN Invoice_East E
ON M.InvNo = E.InvNo
LEFT OUTER Invoice_South S
ON M.InvNo = S.InvNo
WHERE N.InvNo IS NOT NULL
OR E.InvNo IS NOT NULL
OR S.InvNo IS NOT NULL
逻辑是如果我将3个表“ LEFT OUTER JOIN”“保留”到主表中,如果任何InvNo不为null,则发票必须存在于原始主表中。
但是,当我在此隐式联接中编写代码时,得到的记录却略少一些:
select * FROM Invoice_Master
WHERE InvNo IN (
SELECT InvNo FROM Invoice_North)
OR InvNo IN (
SELECT InvNo FROM Invoice_East)
OR InvNo IN (
SELECT InvNo FROM Invoice_South)
我的逻辑哪里出问题了?
造成这种差异的原因可能是第二个查询从主表中选择了离散的行,而第一个查询可能正在重用具有重复行的联接结果。也就是说,如果左外部连接匹配了两行invoice_north
,则这两行都将显示在main中select
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句