0

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

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 where 带来公共行b.name = 'XYZ'。所以a.id = b.id(+)没有任何意义。

4

1 回答 1

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上的简短示例

于 2012-07-20T05:34:28.007 回答