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

时间:2012-07-19 20:04:15

标签: sql oracle oracle11g

是否存在结果集与以下两个语句不同的条件?

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(+)没有意义。

1 个答案:

答案 0 :(得分: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

的简短示例