2013-09-05 106 views
2

第一次問一個關於Stack Overflow的問題......令人驚訝的資源,但是有一件事讓我非常困惑,因爲我是一個SQL新手。3個表的SQL查詢(或加入)

我有三張表,我想要獲得所有與鮑勃學生相關的導師的名字。

表1:教師

================ 
ID  Name 
================ 
1  Bob 

表2:學生

=================================== 
STUDENT_ID  Name  TEACHER_ID 
=================================== 
1    Jayne 1 
2    Billy 5 
3    Mark  2 

表3:MENTOR_RELATIONSHIPS

============================== 
ID  STUDENT_ID MENTOR_ID 
============================== 
1  1    3 
2  2    2 
3  3    3 

表4:導師

===================== 
MENTOR_ID  Name 
===================== 
1   Sally 
2   Gillian 
3   Sean 

我想運行一個查詢來找到Bob的學生的所有導師。所以,對於所有學生的導師TEACHER_ID = 1

在這種情況下,肖恩將是結果。

我知道這與Joins有關,或者我可以使用普通查詢找到它?

任何幫助非常感謝!非常感謝......

回答

3

本應該做的工作

select distinct m.name from students s 
inner join mentor_ralationships mr on mr.student_id=s.student_id 
inner join mentors m on m.mentoir_id=mr.mentor_id 
where s.teacher_id=1; 
+0

感謝你爲這個:-)我會嘗試在一個第二,但爲了幫助我理解代碼,m.name中的首字母'm'的目的是什麼?它是速記的嗎?或者一個變量?同樣's'在'學生s'和'mr'中'mr.mentor_id' ...? 謝謝! – user2751653

+2

它是表m的別名,而不是「學生」而是「導師」而不是「學生」和mr而不是「mentor_ralationships」別名在複雜的連接查詢中非常有用 – danisius

+0

只是說這是一種魅力,非常感謝您的幫助! – user2751653

-1

你可以嘗試以下方法:

SELECT DISTINCT m.name 
FROM students s INNER JOIN TEACHERS t ON t.ID = a.TEACHER_ID 
    INNER JOIN MENTOR_RELATIONSHIPS mr ON mr.Student_id = s.Student_id 
    INNER JOIN Mentors m ON mr.MENTOR_ID = s.MENTOR_ID 
WHERE s.teacher_id = 1 WHERE t.Name = 'Bob'; 
-1
SELECT TEACHER.NAME, STUDENTS.NAME AS STUDENT NAME, MENTORS.NAME AS MENTOR 
FROM TEACHERS JOIN STUDENTS ON TEACHERS.ID = STUDENTS.TEACHER_ID 
       JOIN MENTOR_RELATIONSHIPS ON STUDENTS.STUDENT_ID = 
        MENTOR_RELATIONSHIPS.STUDENT_ID 
       JOIN MENTORS ON MENTOR_RELATIONSHIPS.MENTOR_ID = MENTORS.MENTOR_ID 
WHERE TEACHER.NAME = 'Bob' ; 
+0

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! – FrankerZ