2016-06-15 9 views
-1

私は3つのテーブルを持っています。表A、表Bおよび表Cには、主キーとしてそれぞれid1、id2、id3があります。外部結合の交換方法

ID2は、我々は3行を取得クエリを以下の場合は

ID1は、クエリを次のために、我々は5行

 select * 
    from A 
    where id3=123; 

をC.

で外部キーを取得しているAとCの両方で外部キーであります

残りの2つの行を取得するには、外部結合を

 select * 
    from A,B,C 
    where C.id3=123 
    AND A.id1=C.id1(+) 

私は必要な出力

を取得していますが、私は外部結合を置き換えることができた使用して、「存在しない」のラインクエリまたは使用中のような任意の簡単な方法はありますか?

+0

は、なぜあなたは外部結合を交換したいのですか?それは非常に一般的でコンパクトで、他のオプションと同じくらい速く動作するはずです。私は 'OUTER JOIN'は標準のSQLであるため、Oracleのための'(+) '表記はそうではありません - それは後方互換性のためだけのものです。 –

+0

インラインクエリはそれよりはるかに高速ですが、複数の行 –

+1

右の_results_で始めると、パフォーマンスが心配です。内部結合は間違った結果をもたらします。したがって、これはオプションではありません。 –

答えて

1

構文は構文エラーを生成します。

私はあなたがこのような何かを実行したいことを推測:

select a.* 
from a left join 
    c 
    on a.id3 = c.id3 and a.id1 = c.id1 
where a.id3 = 123; 

しかし、私はBがやっているのか分かりません。それは質問の中にありますが、質問の他のどこにもありません。外部結合

+0

私の間違い私が探している質問は、oracle sqlを使用している外部結合を置き換える方法を更新しました –

+0

@PravinKottawar 。 。この構文は、Oracleによって10年以上サポートされています。 –

+0

Sir私は行のクエリや使用されていないのような単純なソリューションを探しています –

0

は何をしたいのための適切なメカニズムであるが、より標準的な構文は次のようになります。

select * 
from A 
LEFT JOIN C 
    ON A.id1=C.id1 
WHERE id3=123 
+0

私が探しているのは外部結合を置き換える方法ですoracle sqlを使用しています –

+0

あなたは_asked_を知っていますが、あなたは良い_reason_それを置き換えるために、適切な結果が得られ、標準的で共通しており、適切な結果をもたらす他の技術に比べてパフォーマンスに大きな影響はありません。 –

+0

@PravinKottawar '+'がより速いので、乗算に '* '以外のものを使うのが好きです。 –

関連する問題