我不知道如何描述我的表结构,所以希望这是有道理的......
我有 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中的记录?如果是这样,这是通过外连接完成的吗?
Thanks!
EDIT
当然,在我发布这篇文章后,我找到了一个回答问题1的例子。但是,问题2仍然难倒了我。
Example:
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
所以我将你的模式想象成这样:
A --o< B --o< C --< F >-- D
>-- E
您当然可以进行多个连接,也可以使用括号对连接表达式进行分组,就像对算术表达式进行分组一样。
SELECT ...
FROM A LEFT OUTER JOIN (
B LEFT OUTER JOIN (
C LEFT OUTER JOIN (
F INNER JOIN D ON D.d = F.d
INNER JOIN E ON E.e = F.e
) ON C.c = F.c
) ON B.b = C.b
) ON A.a = B.a
这些括号是not子查询,它们只是对连接操作进行分组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)