0

示例场景:

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

谢谢

4

1 回答 1

3

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

于 2012-09-12T17:49:22.257 回答