MySQL - Как я могу получить имена всех студентов, которых учил учитель с именем Джон? - PullRequest
1 голос
/ 03 августа 2010

Как я могу получить имена всех учеников, которым учил учитель с именем Джон?

ученик

id
name

student_has_teacher

teacher_id
student_id

учитель

id
name

Ответы [ 4 ]

4 голосов
/ 03 августа 2010

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

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';
2 голосов
/ 03 августа 2010
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 голосов
/ 04 августа 2010

следующий запрос даст вам желаемый результат наверняка.

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"
0 голосов
/ 03 августа 2010

В первом запросе ниже предполагается, что в 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...