2012-04-08 6 views
2

Я пытаюсь создать оператор SQL, который объединяет две таблицы и возвращает счет. Мне нужны все записи, даже если для счетчика нет элементов.Mysql mutliple joins and count

Если я просто сделать это:

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 q.subject_id) q ON q.subject_id = s.id LIMIT 0, 30 'в строке 4' – SteveF

+0

Отсутствует 'FROM' , должно быть хорошо. – GavinCattell