【发布时间】:2011-04-12 21:46:42
【问题描述】:
我不确定如何描述我的表结构,所以希望这是有道理的...
我有 3 个层次关系表,因此 A 与 B 具有一对多关系,而 B 又与 C 具有一对多关系。诀窍是 B 和 C 中的外键允许为空(即没有定义父级)。我也有 D 和 E,与 A、B 或 C 无关(直接)。
最后,我有 F,它是一个与 C、D 和 E 具有多对一关系的连接表。它的所有字段(其他表的 FK)都不能为空。
我想编写一个 SQL 语句,将所有表连接到一个结果集中。我知道我必须使用外部联接,因为我希望返回所有 A,无论它在 B 中是否有子节点,并且与 B 和 C 类似。
问题一:我一直在看ANSI外连接语法(我之前只用过Oracle“(+)”),找不到外连接超过2个表的例子。有人可以提供/指出一个例子吗?
问题二: 是否可以根据连接表 F 包含表 D 和 E 中的记录?如果是这样,这是通过外部连接完成的吗?
谢谢!
编辑
当然,就在我发布这个之后,我找到了一个回答问题 1 的示例。但是,问题 2 仍然让我难过。
例子:
SELECT A.a,
B.b,
C.c
FROM A
FULL OUTER JOIN B ON B.a = A.a
FULL OUTER JOIN C ON C.b = B.b
【问题讨论】:
-
你可能不想要 FULL OUTER JOIN;它存在,但很少使用(或有用)。
-
您没有指定 F 中的哪些列与其他每个表连接 - 这意味着没有人可以给出明确的答案。
-
能否请您发布一些示例数据和您想要获取的记录集? A、B 和 C 的名称信息量不大。
-
@Jonathan,据我了解 ANSI 联接(我承认我只是在学习)我需要使用完全联接,因为我想要表 A 中的所有记录,即使其中没有子记录表 B 和表 B 中的所有记录,即使没有定义表 A 的外键。左连接或右连接只会给我一个关系方向的空值。表 F 只有 3 个字段,它们是表 C、D 和 E 的外键。Bill 在“绘制”模式的回答中做得很好。
标签: oracle outer-join multiple-tables