2017-11-18 12 views
1

SQL로 시작하여 첫 번째 전체 - 이터레이터가 이미 여기에 있습니다. 달성 시험 점수> X를했다 모든 경우에, 나는 선택 성명을 발표하고 학생의 이름, 성 및 코스 이름을 나열하려면 어떻게SQL은 두 번째 테이블을 기준으로 세 번째 테이블을 기준으로 선택합니다.

student (student_id, first_name, last_name) 
course (course_id, name) 
exam (ref_to_student_id, ref_to_course_id, score) 

:

나는 세 개의 테이블이?

이 내 최고의 샷 :

last_name 
last_name 
name 
name 
name 

와 학생이 어떤 시험/코스에서 X 점 이상 정확하게 말하는 방법이 없습니다 :

SELECT last_name FROM student WHERE student_id IN 
(SELECT ref_to_student_id FROM exam WHERE score > 50) 
UNION ALL 
SELECT name FROM course WHERE course_id IN 
(SELECT ref_to_course_id FROM exam WHERE score > 50) 

내가 얻을 수 있기 때문에 그것은, 결함입니다. 이런 내 마음에서

, 뭔가 :

SELECT first_name, last_name, name 
FROM student, course 
WHERE student_id, course_id 
IN (SELECT ref_to_student_id, ref_to_course_id FROM exam WHERE score > 50) 

이 같은 것을 생산하는 것은 :

John Doe Chemistry 
Jane Dove English 
... 

하지만, 그것은 단지 구문 오류에 대한 알림을 생성합니다.

SELECT last_name, first_name, name, score 
FROM student s 
JOIN exam e ON s.student_id = e.ref_to_student_id 
JOIN course c ON e.red_to_course_id = c.course_id 
WHERE score > 50 

답변

1

당신은 그들, union를이 테이블을하지에 가입해야

SELECT s.first_name AS first_name, s.last_name AS last_name, c.name AS course_name 
FROM student s 
INNER JOIN exam e ON e.ref_to_student_id = s.student_id 
INNER JOIN course ON c.course_id = e.ref_to_course_id 
WHERE e.score > 50; 
+1

은 매력이 있습니다. 고맙습니다! – svrmirac

2

당신은 내부 사용할 수있는이 같은 테이블 간의 조인 :

1

친구,이 시도 :

SELECT s.first_name, s.last_name, c.name 
FROM exam e 
JOIN student s ON s.student_id = e.ref_to_student_id 
JOIN course c ON c.course_id = e.ref_to_course_id 
WHERE e.score > 50 

도와 드리겠습니다.