2013-09-10 2 views
0

У меня есть следующие таблицы:Multiple присоединяется на одной таблице

ТАБЛИЦА: учителя:

teacherID
teacherName

ТАБЛИЦА: студенты:

studentID
studentName
teacherID
advisorID

так, как правило, я знаю, что я могу получить одну строку для каждого студента, с их учителя называют используя INNER JOIN.

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

надеюсь, что это ясно

спасибо!

ответ

4

В нем перечислены ученики с именами их учителей и советников, если они есть, в альфа-порядке ученика, без (a) учителя или (б) советника, который должен существовать. Если вы хотите только там, где эти имена существуют, измените соответствующее соединение на соединение INNER.

SELECT s.studentname as [Student], t.teachername as [Teacher], a.teachername as [Advisor] 
FROM Students s 
LEFT JOIN Teachers t ON s.TeacherID = t.TeacherID 
LEFT JOIN Teachers a ON s.AdvisorID = a.TeacherID 
ORDER BY 1, 2 
+0

удивительно - спасибо Джон, и все остальные тоже – kneidels

1

Почему бы не попробовать что-то вроде следующего. Это было некоторое время, так как я сделал SQL, так что это может не сработать.

SELECT s.studentName AS Student, t.teacherName AS Teacher, a.teacherName AS Advisor 
FROM teachers t, teachers a, students s 
WHERE t.teacherID = s.teacherID AND a.teacherID = s.advisorID 
2

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

Что-то вроде этого:

select s.studentname student 
    , t.teachername teacher 
    , a.teachername advisor 
from students s 
join teacher t 
    on t.teacherID = s.teacherID 
join teacher a 
    on a.teacherID = s.teacherID 
Смежные вопросы