- ベストアンサー
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句の中にある(+)の部分です。 これの意味はいったい何なのでしょうか。 ご存知の方がいらしたらご教授ください。 宜しくお願い致します。
- みんなの回答 (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)
PL/SQL...Oracle ですよねー。 ならば、これは外部結合のことだと思いますが。