0

結果セットが次の 2 つのステートメントと異なる条件はありますか?

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 に答える