使用不同的sql查询在表中查找重复项会产生不同的结果

时间:2013-10-10 10:40:46

标签: sql postgresql

我期待两个查询都给出相同的结果。为什么不是这样?

select count(*) as c,number from numbers group by number having count(*) > 1;

select * from numbers as a INNER JOIN numbers  as b 
                                    on a.number = b.number  and a.id < b.id; 

第一个查询返回1661结果,其中第二个是1911年。

2 个答案:

答案 0 :(得分:2)

因为第一个查询总是每个数字返回一行 第二个可能会返回更多具有相同编号的行(如果您有一式三份等)

尝试下面的内容以查看差异

SELECT a.number, count(*) FROM
(select * from numbers as a INNER JOIN numbers  as b 
   on a.number = b.number  and a.id < b.id) c
GROUP BY a.number
-- having count(*) > 1
-- ORDER BY COUNT(*) DESC

答案 1 :(得分:0)

第一个查询是正确的,每个数字显示一行。

但是第二个查询显示了所有相等数字的组合(参见小提琴)。如果您有两个以上具有相同编号的记录,则JOIN时的记录数将增加。

如果你有:

ID     NUMBER
1        1
2        1
3        1
4        2
5        3

加入这两个表将导致显示数字1的三倍。

您可以在此处看到SQLFiddle以及查询的工作原理。