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

时间:2017-11-23 08:12:21

标签: mysql missing-data natural-join

我无法理解发生了什么...... 我使用两个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列的值相同...

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

祝你好运 最大

2 个答案:

答案 0 :(得分:0)

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

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

按照以下链接进行小型演示,尝试重现您当前的结果。在包含8条记录的表中,自然连接返回8条记录,而由于某些重复匹配,一条属性上的内连接返回10条记录。

Demo

答案 1 :(得分:0)

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

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