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 件の結果を返しますが、2 番目のクエリは 1911 件です。

4

2 に答える 2

0

最初のクエリは正しく、数値ごとに 1 つの行が表示されます。

しかし、2 番目のクエリでは、等しい数のすべての組み合わせが表示されます (フィドルを参照)。同じ番号のレコードが2つ以上ある場合、JOINしたときのレコード数が増えます。

あなたが持っている場合:

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

これら 2 つのテーブルを結合すると、数値 1 の 3 倍が表示されます。

ここでは、SQLFiddleとクエリの動作を確認できます。

于 2013-10-10T10:53:22.057 に答える