• ベストアンサー

PL/SQLの質問です。

PL/SQLでビューを作るため、ソースを解析していたら以下のような構文が出てきました。 FROM T_a C, M_b CD1, M_c CD2 WHERE CD1.CODEID(+) = '6' AND CD1.CODENO(+) = C.x AND CD2.CODEID(+) = '5' AND CD2.CODENO(+) = C.KJNHJNKBN 僕が分らないところは WHERE句の中にある(+)の部分です。 これの意味はいったい何なのでしょうか。 ご存知の方がいらしたらご教授ください。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • CueCue
  • ベストアンサー率40% (86/214)
回答No.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 の行はダブっていても該当する行を取り出してくれています。

その他の回答 (1)

  • chaff
  • ベストアンサー率30% (264/874)
回答No.1

PL/SQL...Oracle ですよねー。 ならば、これは外部結合のことだと思いますが。

参考URL:
http://www.neosystem.co.jp/technical/sql/join_ora.htm

関連するQ&A