2

私は本当にこれを理解していません。coalesce() を試してみましたが、結果はありませんでした...

私は1つ選択しています(問題を理解するために非常に単純化されています):

select col1, 
       col2 
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3'

そして、私は本当に結果が必要なので、この選択結果セットがnullの場合(およびnullの場合のみ)(結果なし)、次のSQL選択が表示されます

select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2'

この2つを1つの大きな選択にするにはどうすればよいですか? (推奨される構文はすべて高く評価されます...)

4

4 に答える 4

2

何かのようなもの:

; WITH Base AS (

    select col1, 
           col2 
    from   table1 t1 
    where  table1.col1='value' 
           and table1.col2='value2' 
           and table1.col3='value3'
)

, Base2 AS (

    select col1, 
           col2 
    from   table1 t1 
    where  table1.col1='another_value' 
           and table1.col2='another_value2'
           AND NOT EXISTS (SELECT 1 FROM Base) -- HERE!!!

)

SELECT * FROM Base
UNION
SELECT * FROM Base2

そして、SQL オプティマイザが最初のクエリを 2 回実行しないことを願いましょう :-) これは CTE (Common Table Expression) です...最初のクエリを 2 回再利用できるように使用しました (1 つは でEXISTS、もう 1 つは でSELECT ... UNION) 。

一時テーブルを使用する

select col1, 
       col2 
INTO   #temp1 -- HERE!!!
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3'

select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2'
       AND NOT EXISTS (SELECT 1 FROM #temp1) -- HERE!!!
于 2013-08-09T16:36:17.607 に答える
1

あなたの例にもう少し情報があれば、私たちにもう少し役立つかもしれません. JOIN を確立できる 2 つのテーブル間に共通の値はありますか?

SELECT  col1 
        ,col2  
FROM    Table1 t1
WHERE  table1.col1='value' 
   and table1.col2='value2' 
   and table1.col3='value3'  
UNION 
SELECT  col1 
        ,col2
FROM    Table2 t2 
WHERE  table1.col1='another_value' 
   and table1.col2='another_value2'
WHERE   NOT EXISTS (SELECT 1 FROM Table1 t1 WHERE t1.Col1 = t2.Col2)
于 2013-08-09T16:37:05.467 に答える
0

次のように COALESCE を使用できます。

select COALESCE (
(select col1, 
       col2 
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3')
,
(select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2')
)
于 2013-08-09T16:38:27.390 に答える