2015-05-25 1 views
-3

У меня есть 3 стола со студентами/школьная информация.3 стола соединяются с одним мостом между ними

*students* table has ID | First Name | Last Name 
*classes* table has ID | Class Name | Department 
*matrix* table has ID |class_id | student_id 

Мне нужно сделать запрос и получить все студенты, все классы, и NULL, где нет совпадения в матрицы таблицы. матрица таблица в основном, где я пишу, какой класс каждый студент зарегистрирован в.

Я использовал

SELECT * 
FROM matrix 
LEFT JOIN students AS students ON matrix.student_id = students.id 
LEFT JOIN classes AS classes ON matrix.class_id = classes.id 

Но это просто возвращает студентов, которые имеют соответствующие предметы. Мне также нужен ученик, у которого нет соответствующего класса.

Пример: http://sqlfiddle.com/#!9/bc9bf/2/0

В скрипку я ожидал бы Johanna также отображаются в запросе с NULL | NULL в соответствующем class_id и student_id

+1

LEFT JOIN, начиная с '' СТУДЕНТОВ не matrix' решает его – amdixon

+0

'-3' является довольно суровый ... иногда кажется, что если кто-то бросает камень, все следуют. Вопрос не в том, что плохо, может быть, мое невежество велико, но это не должно быть фактором наказания, который я думаю. – Rikard

ответ

1

Объединение должно быть сделано с students в левой таблице

select * from students s 
left join matrix m on m.student_id = s.id 
left join classes c on c.id = m.class_id; 

http://sqlfiddle.com/#!9/bc9bf/4

+0

Спасибо Абхику. Моя логика была неправильной, начиная с учеников, не имело для меня смысла, но теперь я понимаю, как думать. – Rikard

Смежные вопросы