为什么SQL JOIN允许重复,但IN不允许重复

时间:2012-09-12 17:26:03

标签: tsql sybase

示例场景:

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子句不允许重复吗?我以为他们做了同样的事情。

由于

1 个答案:

答案 0 :(得分:3)

并不是说它允许重复。通过连接这两个表,您将从表1和表2创建产品,因此如果TABLE_A有两个ID = 1的记录而ID_Table有1个记录,则生成的产品是两个记录。使用IN不会导致记录的倍增,即使该值多次在IN子句中列出,因为您只获得与IN子句中的值匹配的唯一记录。