我如何獲得名爲John的老師教過的所有學生姓名?MySQL - 如何獲得名字爲John的老師教過的所有學生的姓名?
學生
id
name
student_has_teacher
teacher_id
student_id
老師
id
name
我如何獲得名爲John的老師教過的所有學生姓名?MySQL - 如何獲得名字爲John的老師教過的所有學生的姓名?
學生
id
name
student_has_teacher
teacher_id
student_id
老師
id
name
你必須使用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';
當然,你不應該使用select *,那也是不好的技術。當您加入時,它會浪費服務器和網絡資源。不要鼓勵使用差技術。 – HLGEM 2010-08-03 13:38:14
@HLGEM:你說得對。修正了我的答案。 – 2010-08-03 13:49:11
下面的第一個查詢假設有可能在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'
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'
以下查詢肯定會給你想要的結果。
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"
作業問題? – Macros 2010-08-03 11:33:43
http://www.w3schools.com/Sql/sql_join.asp – 2010-08-03 11:34:38
顯然你需要看看INNER JOHN子句。 – 2010-08-03 13:42:04