2012-04-08 14 views
2

2つのテーブルを結合してカウントを返すSQL文を作成しようとしています。カウントに見つかったアイテムがなくても、すべてのレコードを返す必要があります。Mysqlの複数の結合とカウント

私はこれを行う場合は、次の

SELECT s.subject,s2.subject from subjects s 
left join subjects s2 on s.parent_id = s2.id 

それは結構ですが、何のカウントはありません。

SELECT s.subject,s2.subject,count(q.id) from subjects s 
left join subjects s2 on s.parent_id = s2.id 
join questions q on q.subject_id = s.id 

んだけど、まったく意味を持たないものの結果を得る:私はこれを行うことによって、上のカウントを行う必要があり、他のテーブルにそれを参加してみました。

答えて

1

これを試してみてください:

SELECT s.subject, s2.subject, COUNT(q.id) 
FROM subjects s 
LEFT JOIN subjects s2 ON s.parent_id = s2.id 
LEFT JOIN questions q ON q.subject_id = s.id 
GROUP BY s.subject_id, s2.subject_id, q.subject_id 
+1

ありがとう!それは素晴らしい仕事でした。グループのフィールド名を一部変更する必要がありましたが、それは問題ありませんでした。 – SteveF

1

あなたがゼロ疑問を持つことができる場合は、サブクエリにCOUNTを追加する必要があります、あなたは、このような結果にLEFT JOINことができます。

SELECT s.subject, s2.subject, NVL(q.q_count,0) as question_count 
FROM subjects s 
LEFT JOIN subjects s2 ON s.parent_id = s2.id 
LEFT JOIN (SELECT q.subject_id, count(1) as q_count 
    FROM questions q 
    GROUP BY q.subject_id) q ON q.subject_id = s.id 
+0

感謝。私が試してみると、私はエラーが発生します... 'あなたはあなたのSQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして正しい構文をチェックしてください。質問q GROUP BY qject_idを使用してください。q qject_id = s.id LIMIT 0、30行目4行目 – SteveF

+0

'FROM'今は良いはずです。 – GavinCattell

関連する問題