我无法理解发生了什么......
我使用两个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
列的值相同...
对我来说这是不可能的。 如果有人有答案我可以睡得更好^^
祝你好运 最大
答案 0 :(得分:0)
正如评论中指出的那样,您获得不同行数的原因是自然联接使用所有列连接您的自联接。正在比较所有列,因为同一个表出现在连接的两侧。要测试这个假设,只需检查两个表中的列值,它们都应匹配。
这里故事的寓意是避免自然联合。除了不清楚连接条件之外,如果表结构改变,例如连接的逻辑可以很容易地改变。如果添加了新列。
按照以下链接进行小型演示,尝试重现您当前的结果。在包含8条记录的表中,自然连接返回8条记录,而由于某些重复匹配,一条属性上的内连接返回10条记录。
答案 1 :(得分:0)
您需要“投射”您不想在联接中使用的属性,例如在派生表(dt
)中:
SELECT *
FROM table1
NATURAL JOIN ( SELECT attribute1 FROM table1 ) dt;