2010-08-03 36 views

回答

4

你必須使用Inner Joins。內部聯接通過基於聯合謂詞組合兩個表的列值來創建新的結果表。您的查詢可能應該是這個樣子:

SELECT  student.name 
FROM  student 
INNER JOIN student_has_teacher ON (student_has_teacher.student_id = student.id) 
INNER JOIN teacher ON (teacher.id = student_has_teacher.teacher_id) 
WHERE  teacher.name = 'John'; 
+0

當然,你不應該使用select *,那也是不好的技術。當您加入時,它會浪費服務器和網絡資源。不要鼓勵使用差技術。 – HLGEM 2010-08-03 13:38:14

+0

@HLGEM:你說得對。修正了我的答案。 – 2010-08-03 13:49:11

0

下面的第一個查詢假設有可能在student_has_teacher重複記錄,並會避免出現重複的結果,即使是這樣的話:

select s.id, s.name 
from student s 
where s.id in (
    select sht.student_id 
    from student_has_teacher sht 
    inner join teacher on sht.teacher_id = t.id 
    where t.name = 'John' 
) 

如果有在student_has_teacher不重複,那麼你可以使用連接,像這樣:

select s.id, s.name 
from student s 
inner join student_has_teacher sht on s.id = sht.student_id 
inner join teacher on sht.teacher_id = t.id 
where t.name = 'John' 
2
SELECT s.name 
FROM student s 
    INNER JOIN student_has_teacher st ON s.id = st.student_id 
    INNER JOIN teacher t ON st.teacher_id = t.id 
WHERE t.name = 'John' 
0

以下查詢肯定會給你想要的結果。

SELECT st.name 
FROM student AS st 
LEFT JOIN student_has_teacher AS stte ON st.id = stte.student_id 
LEFT JOIN teacher AS te ON stte.teacher_id = te.id 
WHERE te.name = "John" 
相關問題