是否有条件使结果集与以下两个语句不同?
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(+)没有任何意义。
b.name = 'XYZ'
a.id = b.id(+)
不,在任何情况下结果集都不会不同。
但是您的假设“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上的简短示例