自然连接有效但不适用于所有值

Natural join works but not with all values

我不明白发生了什么...
我使用两个 sql 查询,它们 return 不是同一件事...
这个:

SELECT * FROM table1 t1 JOIN table1 t2 on t1.attribute1 = t2.attribute1   

我得到 10 行

另一个:

SELECT * FROM table1 NATURAL JOIN table1  

我得到 8 行

NATURAL JOIN 2 行未 returned...我寻找缺失的行,它们与 attribute1 列的值相同.. .

这对我来说是不可能的。 如果有人有答案我可以睡得更好^^

此致 最大值

正如评论中所指出的,您获得不同行数的原因是自然连接使用 all 列连接您的自连接。正在比较所有列,因为相同的 table 出现在联接的两侧。要检验这个假设,只需检查两个 table 的列值,它们应该都匹配。

这里故事的寓意是避免自然连接。除了连接条件不清楚之外,如果 table 结构发生变化,连接的逻辑很容易改变,例如如果添加了新列。

按照下面的 link 进行尝试重现您当前结果的小型演示。在 8 条记录的 table 中,自然连接 returns 8 条记录,而由于某些重复匹配,一个属性上的内部连接 ​​returns 10 条记录。

Demo

您需要 'project away' 您不想在联接中使用的属性,例如在派生的 table (dt):

SELECT *
  FROM table1
       NATURAL JOIN ( SELECT attribute1 FROM table1 ) dt;