示例场景:
TABLE_A包含一个名为ID的列,并且还包含重复的行。另一个名为ID_TABLE的表包含ID。假设ID_TABLE没有重复 -
如果我这样做:
SELECT * FROM TABLE_A
INNER JOIN ID_TABLE ON ID_TABLE.ID = TABLE_A.ID
结果集中会有重复项。但是,如果我这样做:
SELECT * FROM TABLE_A
WHERE TABLE_A.ID IN (SELECT ID_TABLE.ID FROM ID_TABLE)
结果集中不会有任何重复。
有人知道为什么JOIN
子句允许重复,而IN
子句不允许重复吗?我以为他们做了同样的事情。
由于
答案 0 :(得分:3)
并不是说它允许重复。通过连接这两个表,您将从表1和表2创建产品,因此如果TABLE_A有两个ID = 1的记录而ID_Table有1个记录,则生成的产品是两个记录。使用IN不会导致记录的倍增,即使该值多次在IN子句中列出,因为您只获得与IN子句中的值匹配的唯一记录。