SQL,从基于第三个表的两个表中选择,引用它们

时间:2017-11-18 20:02:18

标签: mysql sql select mariadb dbeaver

刚开始使用SQL,第一个全能者已经在这里了。

我有三张桌子:

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

如果所有获得考试成绩的案例>>,我如何制作一个选择陈述并列出学生姓名,姓氏和课程名称。 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)

这是错误的,因为我得到了:

last_name
last_name
name
name
name

并且没有办法确切地告诉哪个学生在哪个考试/课程上得分高于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
...

但是,它只会产生语法错误的通知。

3 个答案:

答案 0 :(得分:2)

您可以在表之间使用内部联接,如下所示:

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 :(得分:1)

您需要加入这些表格,而不是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

答案 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

我希望能帮到你!