0

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

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 个结果。

4

2 回答 2

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
于 2013-10-10T10:47:07.430 回答
0

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

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

如果你有:

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

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

在这里,您可以看到SQLFiddle以及您的查询是如何工作的。

于 2013-10-10T10:53:22.057 回答