PL/SQLでビューを作るため、ソースを解析していたら以下のような構文が出てきました。

FROM
T_aC,
M_bCD1,
M_cCD2
WHERE
CD1.CODEID(+)='6'AND
CD1.CODENO(+)=C.xAND
CD2.CODEID(+)='5'AND
CD2.CODENO(+)=C.KJNHJNKBN

僕が分らないところは WHERE句の中にある(+)の部分です。
これの意味はいったい何なのでしょうか。
ご存知の方がいらしたらご教授ください。
宜しくお願い致します。

A 回答 (2件)

これは表の結合条件を示す記号です。


外部結合を行う際に、「優先されない側」の表の列名に(+)記号をつけます。

 表の結合を行う場合には、外部結合と内部結合があります。
内部結合とは両方の表の当該列に同じ値を持つものをだけを抜き出すものです。
つまり片方の表にしかないものは漏れてしまうことになります。
また同じ値がダブってしまうと特定できません。

 一方、外部結合では、ある列に対応する同じ値の行が存在しなくても(または同じものがダブっていても)、相方の表のすべての行を出力します。

 たとえば、以下のような表があるとします。

表A:             表B:
VALUE CODE PRICE    CODE COLOR
  100  0A   300    0A  red
  101  0B   150    0B  blue
  102  0A   250    0F white
  103  0D   600

これを内部結合で、表A.CODE = 表B.CODE を条件とすると、
CODE:0A が表A でダブっているのでうまくいきません。

一方、外部結合で 表A.CODE = 表B.CODE(+) としてやると、
表Aに含まれる行がすべて取り出され、表Bの該当行(0A、0B)が結合されて出力されます。

SELECT VALUE,PRICE,COLOR
FROM 表A A, 表B B
WHERE 表A.CODE=表B.CODE(+);

出力結果:
VALUE PRICE COLOR
 101  300   red
 102  150   blue
 103  250   red
 104  600

CODE が 0D の行では、表B に該当するコードがありませんので COLOR を出すことが出来ませんが、CODE が 0A の行はダブっていても該当する行を取り出してくれています。
    • good
    • 0

PL/SQL...Oracle ですよねー。


ならば、これは外部結合のことだと思いますが。

参考URL:http://www.neosystem.co.jp/technical/sql/join_or …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ