这是我的数据库的真实结果。我花了一些时间尝试使用 SSCCE 重现此行为但失败了。下面的最后一个结果是怎么可能的?
SELECT COUNT(*) FROM rr.resource a
--- 15771
SELECT COUNT(*) FROM rr.resource a
NATURAL JOIN rr.interface b
--- 41419
SELECT COUNT(*)
FROM rr.resource a
NATURAL JOIN rr.interface b
NATURAL JOIN rr.interface c
--- 0
最后一个查询中的零 (0) 行计数每次都是一致且可重复的。在我创建的一些示例中,对同一个表添加第二个自然联接两次会产生相同数量的行(正如我所期望的)。那么上述结果怎么可能呢?
基本上,
NULL
是造成这种情况的原因,因为NULL<>NULL
. 自连接表中的一列将全部为NULL
s。这是一个小测试用例,说明了为什么会发生这种情况。淘气
NULL
的平等和工作方式NATURAL JOIN
,为你挑选列名加入。设置:
查询:
第一个查询将给出 2,第二个查询将给出 1。
您的问题将只是此问题的更高级版本。
使用
JOIN .... USING
您自己选择的列来解决此问题。