我期待两个查询都给出相同的结果。为什么不是这样?
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年。
答案 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以及查询的工作原理。