SQL、select 来自两个基于第三个表的表,第三个表引用了它们
SQL, select from two tables based on a third, which references them
刚从 SQL 开始,第一个通宵达旦的人已经来了。
我有三个表:
student (student_id, first_name, last_name)
course (course_id, name)
exam (ref_to_student_id, ref_to_course_id, score)
对于考试成绩 > X 的所有情况,我如何制作 select 声明并列出学生姓名、姓氏和课程名称?
这是我最好的照片:
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)
这是错误的,因为我得到:
last_name
last_name
name
name
name
并且无法准确判断哪个学生在 exam/course 上的得分高于 X。
在我看来,是这样的:
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
...
但是,它只会生成有关语法错误的通知。
您需要加入这些表,而不是 union
它们:
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
您可以像这样在表之间使用内部联接:
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;
朋友,试试这个:
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
希望能帮到你!
刚从 SQL 开始,第一个通宵达旦的人已经来了。
我有三个表:
student (student_id, first_name, last_name)
course (course_id, name)
exam (ref_to_student_id, ref_to_course_id, score)
对于考试成绩 > X 的所有情况,我如何制作 select 声明并列出学生姓名、姓氏和课程名称?
这是我最好的照片:
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)
这是错误的,因为我得到:
last_name
last_name
name
name
name
并且无法准确判断哪个学生在 exam/course 上的得分高于 X。
在我看来,是这样的:
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
...
但是,它只会生成有关语法错误的通知。
您需要加入这些表,而不是 union
它们:
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
您可以像这样在表之间使用内部联接:
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;
朋友,试试这个:
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
希望能帮到你!