【发布时间】:2013-06-11 14:39:57
【问题描述】:
这是一个让我困惑了几天的问题,我搜索了又搜索,但找不到任何令人信服的答案!
简单的问题,为什么限制在 SQL 中使用 2 个外部联接,即使使用不同的列,在同一个表上,检查下面的查询以获得更好的理解。我也可以使用嵌套子查询或 ANSI 连接来克服它们,但是为什么它甚至首先使用 (+) 运算符受到限制!
在这个问题中,我指的是错误:
ORA-01417: 一个表最多可以外部连接到另一个表
我想问的是为什么允许这样做:
select * from
a, b, c
where a.a1 = b.b1
and a.a2 = c.c1
以及为什么不允许这样做:
select * from
a, b, c
where a.a1(+) = b.b1
and a.a2(+) = c.c1
请不要理会 ANSI 和嵌套子查询
【问题讨论】:
-
你能提供一个你想要做什么的例子吗?您应该可以根据需要多次加入(
inner或outer)同一张表... -
正如@sgeddes 所说,您很可能会感到困惑。 Oracle 没有“2 个外部联接”限制
-
我相信只有在使用
(+)运算符进行“旧式”外连接时,您才会得到这个。不要使用(+)运算符 - 它是不可移植的,很可能被 Oracle 弃用。相反,使用 ANSI 样式的 LEFT OUTER JOIN 来执行连接。分享和享受。 -
@BobJarvis:外连接的旧语法(使用
(+))已已弃用,不应再使用。 -
@a_horse_with_no_name 当然不再推荐,即使是 Oracle 也不推荐。你确定它已被弃用吗?我在 Oracle 文档中找不到任何关于它的内容。