【发布时间】:2014-02-03 06:12:11
【问题描述】:
我想将多个表左连接到一个表。这些表本身就是子查询的结果。
我想到的一个经典例子是,我有一堆子查询:
1. 子查询 A 给了我学生的详细信息 - 比如说表 1
2. 子查询 B 给了我学生的数学成绩 - 比如说表 2
3. 子查询 C 给我学生的英语成绩 - 比如说表 3
表格仅包含学生参加该考试的分数,如果学生根本没有参加考试(或分数
我想从这些中得到什么?我正在尝试通过在这些表上执行一些连接来构建动态查询(其中某些部分在运行时由外部机制填充)给我:
1. 两项考试均及格的学生及相应分数
2. 学生通过了其中一项考试,但未通过(或未参加)另一项考试和相应的分数(如果未参加,则为 NULL)。
3. 所有学生及其对应分数。
我的想法是将每个分数表加入学生资料表。我该怎么办?
在您继续建议 table 1 left join table 2 left join table 3 之前,如果表 2 包含特定学生的空记录(据我所知),此结构将导致问题。根据我的理解,这基本上是在表 2 上加入表 3 而不是在表 1 上,这就是我想要的。
PS:如果你知道的话,请随意提出更好的方法来获得我需要的东西。
【问题讨论】:
-
好吧,这似乎是家庭作业,您应该尝试一下。然后这里的某个人会帮助您解决问题。
-
“这基本上是在表 2 上连接表 3,而不是在表 1 上,这是我想要的” - 不,它连接到前一个连接的结果集。并且由于之前的连接是left outer,即使
table 2中没有对应的行,它也会包含table 1的所有行。 ON 子句不必包含来自table 2的字段 - 它可以包含来自table 1的字段,因此您可以直接将它们等同于来自table 3的字段。 -
这不是家庭作业。 @Branko:谢谢