2012-04-17 10 views
1

を使用して選択し、私は(2)case文があります。のOracleクエリはケース

SELECT CASE WHEN EXISTS 
        (SELECT * 
        FROM MYTABLE_A 
        WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000' 
        ) 
      THEN 0 
      ELSE 1 
     END AS FLAG_MYTABLE_A 
from DUAL; 
SELECT CASE WHEN EXISTS 
        (SELECT *, timestamp 
        FROM MYTABLE_B 
        WHERE 
        timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000' 
        )      ) 
      THEN 0 
      ELSE 1 
     END AS FLAG_MYTABLE_B 
from DUAL; 

結果:私は、私が表示され、次の結果を得ることができ、このクエリを構築する手助けが必要

FLAG_MYTABLE_A 
-------------- 
      0 

FLAG_MYTABLE_B 
-------------- 
     1 

を。

MYTABLENAME  MYFLAG 
-----------  ------ 
MYTABLE_A    0 
MYTABLE_B    1 

入れ子の選択を見ていますか?誰かが私にこれを設定する方法を教えてもらえますか?

答えて

5

UNION ALL

SELECT 'MYTABLE_A' AS MYTABLENAME, CASE WHEN EXISTS 
        (SELECT * 
        FROM MYTABLE_A 
        WHERE timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000' 
        ) 
      THEN 0 
      ELSE 1 
     END AS FLAG_MYTABLE_A 
from DUAL 
UNION ALL 
SELECT 'MYTABLE_B' AS MYTABLENAME, CASE WHEN EXISTS 
        (SELECT *, timestamp 
        FROM MYTABLE_B 
        WHERE 
        timestamp = to_char(sysdate-1, 'yyyymmdd') || '0000' 
        )      ) 
      THEN 0 
      ELSE 1 
     END AS FLAG_MYTABLE_B 
from DUAL; 
+0

通常の結果セットで重複がありませんので、 'UNION'は、この場合に十分なものでなければなりませんとにかく –

+4

@NWest - はい、私は知っていますが、重複をチェックする必要がないので、 'UNION ALL'は高速です。この場合は重要ではないかもしれませんが、とにかくそれが正しいと思います – Lamak

+0

良い点:-)。 –

1
あなたのような何かを行うことができます

:あなたが使用することができます

SELECT "MYTABLE_A", CASE ... END AS "MYFLAG" FROM DUAL 
UNION 
SELECT "MYTABLE_B", CASE ... END AS "MYFLAG" FROM DUAL