Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
是否存在结果集与以下两个语句不同的情况?
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(+)没有任何意义。
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上的简短示例