0

シナリオ:

5 行の snippets という名前のテーブルがあり、15 行の Revisions という名前のテーブルがあります

私がやりたかったのはuser_id、 を含む on リビジョンに属するすべてのスニペットを取得することでしたsnippet_id

次のmysqlクエリがあります:

SELECT DISTINCT * FROM "snippets" 
INNER JOIN "revisions" 
    ON "user_id" = "1" 
    AND "snippet_id" = "snippets.id"
GROUP BY "snippets"."id" 
ORDER BY "created_at"

これにより、すべてのスニペットが表示されますrevisions.user_id = 1。問題は、なぜ私のカウントが違うのですか?そのクエリの合計結果は5ですが、実行すると:

SELECT COUNT(distinct snippets.id) FROM "snippets" 
INNER JOIN "revisions" 
    ON "user_id" = "1" 
    AND "snippet_id" = "snippets.id"
GROUP BY "snippets"."id";

結果は1 1 1 1 1

4

1 に答える 1

2

には意味がありませんDISTINCT COUNT(*)COUNT(DISTINCT someotherfield)あなたはそれの代わりに探しているのかもしれません。値COUNT(*)を持つすべての行が含まれるため。NULL

更新:*COUNTで使用したのと同じフィールドを使用しないでください。GROUP BYそのため、結果が得られます1 1 1 1 1。この場合、GROUP BY "snippets"."id"句を削除します。

于 2012-09-17T14:51:23.533 に答える