这里有一个问题困扰了我几天,我搜索了很多但找不到令人信服的答案!
简单来说,为什么在SQL中限制了对同一张表使用两个外连接,即使使用了不同的列,通过下面的查询可以更好地理解。虽然我可以使用嵌套子查询或ANSI连接来克服这些限制,但是为什么一开始就使用(+)运算符限制呢!
在这个问题中,我指的是错误:
ORA-01417:最多只能将一个表与另一个表进行外连接
我的问题是为什么允许这样做:
请勿修改 ANSI 和嵌套子查询。
简单来说,为什么在SQL中限制了对同一张表使用两个外连接,即使使用了不同的列,通过下面的查询可以更好地理解。虽然我可以使用嵌套子查询或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 和嵌套子查询。
(+)
运算符进行“旧式”外连接,我相信您才能理解这个问题。请勿使用(+)
运算符——它不可移植,并且可能会被Oracle弃用。相反,请使用ANSI风格的LEFT OUTER JOIN来执行连接操作。分享并享受。 - Bob Jarvis - Слава Україні(+)
进行外连接的旧语法已经被弃用,不应再使用。 - user330315