0
Table Article id title
Table Comment id articleID comment

SELECT a.*, count(c.id) FROM Article as a LEFT JOINT Comment as c 
ON c.articleID = a.id
LIMIT 0, 10

コメント数が多い記事を表示したいのですが、結果が1つしか表示されません(コメントあり)。

コメントがない記事をリストしないでください。

すべての記事を一覧表示する方法 (コメントあり/コメントなし) ?

4

2 に答える 2

3

まず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 JOINLEFT 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のデモです

于 2013-07-22T02:55:17.957 に答える
0

左結合しないでください...

結合を終了すると、1 つの一致する行をテーブル Article に結合するだけです。次に、記事 ID でグループ化し、グループ化された結果をカウントしているため、単純にテーブルを結合します。

SELECT a.*, count(a.id) FROM Article as a, Comment as c 
WHERE c.articleID = a.id
GROUP BY a.id
LIMIT 0, 10
于 2013-07-22T02:51:42.040 に答える