2012-04-08 41 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