使用“ LEFT OUTER JOIN”和“ IN”获得不同的结果,我的逻辑哪里出问题了?

TSQL_Noob

我有四个表,一个是主发票表,另外三个是来自不同地区的发票。我想要实现的是仅从“主发票”表中返回记录,其中发票编号在其他三个表之一中。例如:

 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用LEFT OUTER JOIN建立查询结果

我可以使用LEFT OUTER JOIN和NULL,而不是一个表?

如何使用 IN 条件以及 LEFT OUTER JOIN 和 ON

使用VIEW和LEFT OUTER JOIN进行慢查询

使用COALESCE和LEFT OUTER JOIN的SQL查询

在PostgreSQL中使用LEFT OUTER JOIN删除

使用WHERE子句的SQL LEFT OUTER JOIN

使用 LEFT OUTER JOIN 时的额外空行

SQL COUNT()函数和LEFT OUTER JOIN

GROUP CONCAT 和 LEFT OUTER JOIN 拆分

MySQL查询-如何获取具有GROUP BY和WHERE条件的SUM并使用LEFT OUTER JOIN?

MySQL-使用LEFT OUTER JOIN和WHERE子句选择记录

如何使用PHP / PDO有效处理LEFT OUTER JOIN结果

如何使用LEFT OUTER JOIN创建JPA查询

使用LEFT OUTER JOIN返回计数,即使0

使用XMLTABLE的LEFT OUTER JOIN不起作用吗?

使用LEFT OUTER JOIN从其他表更新表值

使用 LEFT OUTER JOIN 将 SQL 转换为 LINQ

SQLite3使用LEFT OUTER JOIN来模拟RIGHT OUTER JOIN,而不能更改表顺序

MySQL LEFT OUTER JOIN没有给出正确的结果

Teradata:如何与数据类型不同的 LEFT OUTER JOIN?

带有 Where 子句的 SQL LEFT OUTER JOIN 问题

BigQuery 问题 - LEFT OUTER JOIN 不能在没有连接两侧字段相等的条件下使用

在LEFT OUTER联接上使用Linq删除“重复”结果

Mysql的INNER JOIN后LEFT OUTER JOIN

LEFT OUTER JOIN PostgreSQL是INNER JOIN吗?

使用LEFT JOIN和History表的MySQL查询的正确结果

mysql如何使用join和left join

当条件为false时使用LEFT OUTER JOIN检索数据,否则为INNER JOIN