2013-12-18 14 views
6

私は、次のクエリを持っている:MySQLが単純なクエリに対して誤ったカウントを与えているのはなぜですか?

SELECT COUNT(resource_id) AS num 
FROM resources_authors 
WHERE author_id=1657 

これが正しい結果 '75' を返します。

私だけの個別のIDを検索するためのクエリを変更する場合:

SELECT COUNT(DISTINCT resource_id) AS num 
FROM resources_authors 
WHERE author_id=1657 

私は間違っている「74」の下の結果を取得。

ただし、のユニークなインデックスとしてテーブルがであり、重複データがないことを確認して再度確認しました。例えば、私が実行しました:

SELECT resource_id, COUNT(resource_id) AS c 
FROM resources_authors 
WHERE author_id =1657 
GROUP BY resource_id 
ORDER BY c DESC 

をさらに奇妙なことに、私は間違ったクエリにLIMITを追加する場合、それは正しい結果を返します!だから、:

SELECT COUNT(DISTINCT resource_id) 
FROM resources_authors 
WHERE author_id=1657 
LIMIT 0 , 100 

正しく75

私はバグを直撃している返す、または私は何かを誤解していますか?これはINNODBテーブル、Windows上のMySQL 5.5.24です。

+1

'COUNT()'を使用しない場合、返される行数はいくつですか? 'SELECT resource_id AS num FROM resources_authors WHERE author_id-1657'? –

+1

resource_idはユニークキーの* only *列ですか?それはヌル可能ですか?そうであれば、ヌル値のいずれかですか? –

+0

まず、 'resources_authors'という名前のテーブルが' resource_id'だけにユニークなインデックスを持っていることが疑わしいと思います。第二に、(あなたがそれを記述する)この動作は非常に独特です。クエリ実行間にテーブルが変更されていないことを確認してください。 –

答えて

4

known MySQL bugです。この修正は、5.5.35、5.6.15、および5.7.3の変更ログに記載されています。

関連する問題