2017-07-17 4 views
0

以下のクエリがあります。+演算子を持つ結合

Select a.c1,b.c1,a.c2,b.c2 from tab1 a,tab2 b 
where a.c3(+)=b.c3 and b.c3(+) = 'abc' 

私は上記のクエリがタブ2との結合タブ1に残っていることを知っています。しかし、私はb.c3(+)の意味を理解していませんでした。これを解決するために私を助けてください。前もって感謝します。

+3

[Oracle(+)]演算子(https://stackoverflow.com/questions/4020786/oracle-operator)の可能な複製 –

+0

https://stackoverflow.com/questions/4020786/oracle-operator – mohan111

+0

@ AndréStannek - この質問はあなたが提案した**の重複ではありません**。ここでの質問は、「(+)意味**は平等の反対側に一定の価値**を持っています** – mathguy

答えて

3

何が起こっているのかを理解する必要はありません。構文は廃止されており、非推奨にする必要があります(同様の構文はSQL Serverでは推奨されていません)。

ただ、外部結合としてこれを書くことを学ぶ:

Select a.c1, b.c1, a.c2, b.c2 
from tab1 a left join 
    tab2 b 
    on a.c3 = b.c3 and b.c3 = 'abc'; 
+1

私はあなたの思考が、今日ほとんど使用されていない30歳以上の構文を実際に教えている教授/講師であることを知りたいのです。 –

+0

私は古いコードを分析しています。そしてそこに私はこの行a.b(+)= 'abc'を持っています。これはa.b(+)はある意味を持っていますか?これは単にa.b = 'abc'を意味します – mano

+0

これは、その前にある式が外部結合の弱い側として扱われるべきであることを意味します。つまり、あなたの例では、テーブル 'A 'に' b.c3'と一致する行がない場合、 'B'行は結果から除外されず、' A'から行に結合されたかのように扱われますすべてのヌル値。 –

0

を興味深い質問!あなたは質問をする、またはそれを試すために複数のテーブルを用意する必要はありません。

SCOTTスキーマのEMPテーブルを使用します。我々は

select * from emp where deptno(+) = 10 

にこれを変更した場合

select * from emp where deptno = 10 

部門10

我々は何を得るのですかでは、従業員のために、3行を返すのだろうか? 1つの可能性は、エラーメッセージが表示されることです。もう一つは、外部結合のためのOracle表記法に似ていますが、deptnoが10に等しくなくても、EMP行の行を取得します(実際には間違った予想ですが、deptnoが10でない場合は行を取得し、 (+)は右側にあるはずです。となります)

実際にはどちらも表示されません。代わりに、(+)はが無視されたです。これまでとまったく同じ3行が得られます。

あなたの推測は正しいので、その文脈の(+)は何もしません。

「コンテキスト」とは、ある条件で=と(+)構文を使用し、もう一方は定数式であることです。条件はではなく、です。 "参加条件"。

関連する問題