子查询从4个表中提取值

时间:2019-05-21 15:56:53

标签: sql postgresql

有人告诉我这不是一个很困难的事情,但是不幸的是我无法真正弄清楚。我有下表

Person

**ID_Pers** | PersName | City | State | Phone | Email

1950901123893  Michael   Houston Texas  ---     ----

Student

**ID_student** | *ID_Pers* | entry_year | status | exit_year

A123           1950901123893  2014       finished   2017

Subject

**ID_subject** | Subject_name | credit_number | courses | laboratories

Exams

*ID_student* | *ID_subject* | **exam_date** | final_grade

粗体键是主键,而斜体键是外键。我必须提取至少通过的迈克尔已经通过的考试的学生。我知道我必须使用子查询,在这些子查询中,我首先选择迈克尔已通过的考试,然后至少选择已通过这些考试的学生。我在执行此任务时遇到困难。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

sp

我知道这基本上是为了选择迈克尔已通过的考试。但是我需要一些东西来提取至少已经通过他的人的其他人。

答案 1 :(得分:0)

您可以获取所有通过考试的学生(任何考试),然后将结果与查询中获取的考试进行合并。您的最终查询应如下所示:

SELECT * from Exams A
INNER JOIN student ON student.ID_student = exams.ID_student
INNER JOIN person ON student.ID_Pers = person.ID_pers
INNER JOIN 
(SELECT * from Exams
INNER JOIN student ON student.ID_student = exams.ID_student
INNER JOIN person ON student.ID_Pers = person.ID_pers
WHERE Exams.final_grade >=5 AND person.PersName = "Michael") B ON A.ID_Subject = B.ID_Subject AND A.exam_date = B.exam_date
WHERE A.final_grade >=5;

希望这会有所帮助!