2012-04-08 40 views
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 2012-04-08 13:23:44

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服務器版本相對應的手冊,以便在'questions q GROUP BY q.subject_id'附近使用正確的語法。q ON q.subject_id = s.id限制0,30'在第4行' – SteveF 2012-04-08 13:18:22

+0

缺少'FROM' ,現在應該是好的。 – GavinCattell 2012-04-08 13:35:05