まずGROUP BY
、ベースクエリで使用する必要があります
SELECT a.id, a.title, COUNT(c.id) comment_count
FROM Article a LEFT JOIN Comment c
ON c.articleID = a.id
GROUP BY a.id, a.title
出力例:
| | ID | タイトル | COMMENT_COUNT |
-------------------------------
| | 1 | タイトル1 | 2 |
| | 2 | タイトル2 | 0 |
これがSQLFiddleのデモです
使用していてLEFT JOIN
、コメント付きの記事のみが必要な場合は、HAVING
句を適用する必要があります
SELECT a.id, a.title, COUNT(c.id) comment_count
FROM Article a LEFT JOIN Comment c
ON c.articleID = a.id
GROUP BY a.id, a.title
HAVING comment_count > 0
または、単純INNER JOIN
に Andy が提案したように使用します。これは、内部結合がすべての不一致を除外するためです (つまり、コメント テーブルに対応するレコードがないすべての記事とその逆)。ほとんどの場合、 を使用する方が を使用するよりも高速ですINNER JOIN
LEFT JOIN
。
SELECT a.id, a.title, COUNT(c.id) comment_count
FROM Article a JOIN Comment c
ON c.articleID = a.id
GROUP BY a.id, a.title
どちらも以下を生成します:
| | ID | タイトル | COMMENT_COUNT |
-------------------------------
| | 1 | タイトル1 | 2 |
これがSQLFiddleのデモです