2013-09-10 44 views
0

我有以下表格:多个连接到同一台

表:老师:

teacherID
teacherName

表:学生:

studentID
studentName
teacherID
advisorID

所以,通常情况下,我知道我能得到每名学生单列,与老师使用INNER JOIN名。

但在这种情况下 - 顾问和tacher - 来自同一个老师表。那么我怎么能两次加入老师的名单 - 一旦获得了老师的名字,然后再次获得老师的名字?

希望这个很清楚

谢谢!

回答

4

此列出了学生与老师和顾问如有的名字,在学生的字母顺序,没有任何(一)教师或(b)顾问不必存在。如果您只想要这些名称存在的位置,请将相应的联接更改为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