1

質問のタイトルが悪いので申し訳ありませんが、私が質問していることを説明する正しい用語がわかりません。

私は2つのテーブルを持っています:

投稿:

p_id | p_author | p_text

post_comments:

pc_id | pc_p_id | pc_author | pc_text

各コメントのpc_p_idは、投稿のp_idに対応しています。

選択したい:

  1. 特定の作成者からのすべての投稿のp_idとp_text
  2. 対応する投稿のコメント数

私はこのようなクエリで最初の部分を行うことができます(「1」が作成者であると仮定します):

SELECT p_id, p_text FROM posts WHERE p_author = 1

そして、私はこのような特定の投稿に対するコメントの数を得ることができます(「12」が投稿IDであると仮定します):

SELECT COUNT(*) FROM post_comments WHERE pc_p_id = 12

私の質問は、2つのクエリを組み合わせて、特定の作成者からのすべての投稿のp_idとp_textを、対応する投稿のコメント数とともに取得するにはどうすればよいですか?

次のようにLEFTJOINを使用しようとしましたが、構文エラーが発生します。

SELECT t1.p_id, t1.p_text, t2.COUNT(*)
FROM posts t1 LEFT JOIN post_comments t2
WHERE t1.p_author = 1 AND t2.pc_p_id = t1.p_id 
ORDER BY t1.p_id DESC   

SQLフィドルは次のとおりです。

http://sqlfiddle.com/#!2/e9b975

4

3 に答える 3

1
SELECT p_id, p_text, count(1)
FROM posts p
   JOIN post_comments pc
   ON p.p_id = pc.pc_p_id
WHERE p_author = 1
GROUP BY p_id, p_text

埋め込み選択を行う編集バージョンは次のとおりです。

SELECT p_id, p_text,
   (SELECT COUNT(1) FROM post_comments WHERE pc_p_id = p.p_id) AS count
FROM posts p
WHERE p_author = 1

私はあなたのフィドルでこれを確認しました

于 2013-03-13T18:47:14.130 に答える
0

LEFT_JOIN は、左側のテーブルからすべての行が必要な場合に使用されますが、右側のテーブルには対応する行がない場合があります。それ以外の場合は、ストレート (内部) 結合が必要です。また、COUNT() などの集計関数を使用する場合、非集計列が選択されている場合は GROUP_BY 句を使用する必要があります。

于 2013-03-13T18:49:22.040 に答える
-1

SELECT p.p_id, p.p_text, count( pc.pc_id ) AS Count
FROM posts p, post_comments pc
WHERE pc.pc_p_id = p.p_id
AND p.p_author =1
AND pc.pc_p_id =12

于 2013-03-13T19:00:40.310 に答える