1

我不明白发生了什么...
我使用两个不返回相同内容的 sql 查询...
这个:

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

我得到 10 行

这另一个:

SELECT * FROM table1 NATURAL JOIN table1  

我得到 8 行

NATURAL JOIN没有返回 2 行...我查找缺少的行,它们与列的值相同attribute1...

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

最好的问候马克斯

4

2 回答 2

0

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

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

请点击下面的链接查看一个尝试重现您当前结果的小型演示。在一个有 8 条记录的表中,自然连接返回 8 条记录,而一个属性的内部连接由于某些重复匹配而返回 10 条记录。

演示

于 2017-11-23T08:24:35.643 回答
0

您需要“投影”您不想在连接中使用的属性,例如在派生表 ( dt) 中:

SELECT *
  FROM table1
       NATURAL JOIN ( SELECT attribute1 FROM table1 ) dt;
于 2017-11-23T09:56:12.060 回答