INTERSECT和UNION提供不同的重复行数

时间:2014-07-23 21:34:54

标签: sql sql-server duplicates union intersect

我有两个表A和B具有相同的列名。我必须将它们组合成表C

当我运行以下查询时,计数不匹配 -

select * into C
from 
(
select * from A
union
select * from B
)X

C的记录数与A和B不匹配。有89行的差异。所以我发现有重复的东西。 我使用以下查询来查找重复项 -

select * from A 
INTERSECT
select * from B

-- 80 rows returned

有人可以告诉我为什么交叉返回80个重复,而使用联合的计数差异是89?

1 个答案:

答案 0 :(得分:4)

A和/或B内部可能存在重复内容。所有集合运算符对结果执行隐式DISTINCT(逻辑上,不一定是物理上的)。

重复行通常是数据质量问题或彻头彻尾的错误。我通常通过在应该是唯一的所有列和列集上添加唯一索引来降低此风险。我特别确保每个表都有一个主键,如果可能的话。