gpt4 book ai didi

oracle - 如何对 >2 个表进行外连接 (Oracle)

转载 作者:行者123 更新时间:2023-12-02 04:22:09 25 4
gpt4 key购买 nike

我不知道如何描述我的表结构,所以希望这是有道理的......

我有 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

最佳答案

所以我将你的架构想象成这样:

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

这些括号不是子查询,它们只是对连接操作进行分组。

关于oracle - 如何对 >2 个表进行外连接 (Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com