【问题标题】:Left join multiple tables onto one table [closed]左将多个表连接到一个表中[关闭]
【发布时间】: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:谢谢

标签: sql oracle join


【解决方案1】:

您可以通过仔细编写查询来创建适当的关系:

select 
    t1.*, t2.foo, t3.bar
from
    table1 as t1
    left join table2 as t2 on t1.id = t2.id
    left join table3 as t3 on t1.id = t3.id

如您所见,table3 与 table1(而不是 table2)相关,这正是您想要的。

【讨论】:

  • 哦,是的。我虽然在将表 1 加入表 2 后无法访问它的别名
  • 正如我所说,您可以通过仔细编写查询来创建适当的关系。这意味着:任何关系。你当然可以创建非常复杂的关系......但我建议你保持简单。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多