2017-12-14 4 views
2

私はINTERSECTIONを2つのselect文の間に置かなければなりません。両方のselectステートメントがいくつかの結果セットを返す場合にのみ、条件が発生します。いずれかがO行を返す場合、交差は機能しません。最終結果は、いくつかの行を戻した文でなければなりません。これはSQLで可能ですか(回答はpl/sqlには必要ありません)?ORACLEのINTERSECT(SQLはPL/SQLではない)

答えて

1

これは、この構成で実現できます。

with t1 as (select level id from dual where 1 = 0 connect by level <= 3), 
    t2 as (select level id from dual where 1 = 1 connect by level <= 5) 
select distinct * 
    from t1 
    where exists (select null from t2 where id = t1.id) 
    or (select count(1) from t2) = 0 
union all 
select distinct * from t2 where (select count(1) from t1) = 0 

t1t2いくつかのデータをシミュレートします。 にデータがない場合、最初にselectが交差を作成するか、最初のテーブルからすべての別個の行を取得します。 第2のselectunion all以降)は、t1に行がない場合、t2からすべてのデータを取得します。

編集:あなたはsimplierそれを行うことができます。

後半のコメントを
select * from t1 
intersect 
select * from t2 
union 
select * from t1 where (select count(1) from t2) = 0 
union 
select * from t2 where (select count(1) from t1) = 0 
+0

申し訳ありません。これは非常によく説明された完璧な解決策です。それは私のために働いた。ありがとうalot :-) –

関連する問題