一尘不染

在第二个表上具有过滤条件的Oracle外连接

sql

是否有条件使结果集与以下两个语句不同?

select  * from a,b where a.id = b.id and b.name = 'XYZ'
select  * from a,b where a.id =b.id(+) and b.name = 'XYZ'

我认为在这两种情况下,它都会将a和b中的公共行带到哪里b.name = 'XYZ'。所以a.id = b.id(+)没有任何意义。


阅读 145

收藏
2021-05-16

共1个答案

一尘不染

不,在任何情况下结果集都不会不同。

但是您的假设“a.id = b.id(+)没有任何意义”并不是100%正确的。它
一个含义,因为它定义了连接,否则它将是a和b的笛卡尔积,其中所有行都来自a和b.name =’XYZ’。

无效(+),因为语句“在语义上”是错误的。在id上进行外部联接在名称上进行联接是没有意义的。

通常需要这样的东西:

select  * from a,b where a.id =b.id(+) and b.name(+) = 'XYZ';

http://www.sqlfiddle.com/#!4/d19b4/15上的简短示例

2021-05-16