2010-08-03 4 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

물론 선택 사항 *을 사용해서는 안되며, 너무 가난한 기술입니다. 가입 할 때 서버 및 네트워크 리소스를 낭비합니다. 가난한 기술의 사용을 장려하지 마십시오. – HLGEM

+0

@HLGEM : 네 말이 맞아. 내 대답이 수정되었습니다. –

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" 
관련 문제