2017-03-02 85 views
0

我有一個巨大的查詢在case-when塊中使用。 我的查詢看起來是這樣的:Oracle:處理空的情況聲明

SELECT 'TEST' FROM DUAL WHERE 1=1 AND EXISTS(
SELECT 
    CASE 
    WHEN EXISTS 
    (Select 1 from dual where 1=2) 
    THEN 1 
    ELSE 
    (Select 1 from dual where 1=2) 
    END 
FROM DUAL); 

我要執行我的select語句只有在情況下,當語句返回的記錄。然而,它總是打印「測試」因爲這段代碼總是返回NULL:

SELECT 
    CASE 
    WHEN EXISTS 
    (Select 1 from dual where 1=2) 
    THEN 1 
    ELSE 
    (Select 1 from dual where 1=2) 
    END 

所以基本上我想打印「TEST」只有當沒有返回記錄(或空值)。我怎樣才能做到這一點?

+0

改爲將條件移至WHERE子句。 – jarlh

回答

2

具有NULL值的一列的行與不存在的行不相同。所以,你不能使用EXISTS來完成你想要的。一種方法是:

SELECT 'TEST' 
FROM DUAL 
WHERE 1 = 1 AND 
     1 = (SELECT CASE WHEN EXISTS(Select 1 from dual where 1=2) 
         THEN 1 
         ELSE 0 
        END 
      FROM DUAL 
     ); 

也就是說,查找一個特定的值,而不是檢查行的存在。