2015-06-22 146 views
0
SELECT * 
FROM FirstTable 
WHERE RowProcessed = 'N' 
AND (
     CASE 
      WHEN EXISTS(SELECT top 1 FROM SecondTable) 
      THEN 1 
      ELSE EXISTS(
         SELECT SecondTable.RowProcessed 
         FROM SecondTable 
         WHERE FirstTable.Key = SecondTable.Key 
         AND SecondTable.RowProcessed = 'Y' 
         ) 
     END 
     ) 
AND OtherConditions 

case when then else where where clause。不確定語法。oracle sql error case when then else

我想驗證在SecondTable中有行,如果有行檢查另一個條件,這基本上是我想要做的。

+0

Oracle中沒有「TOP」。請閱讀手冊 –

+0

爲什麼不在兩個'EXISTS'之間使用OR子句? –

+0

你究竟想達到什麼目的? – Mureinik

回答

0

也許這是你想要的?如果在SecondTable中有行,那麼請執行第二步:EXISTS

SELECT * FROM FirstTable 
WHERE RowProcessed = 'N' 
AND (NOT EXISTS (SELECT 1 from SecondTable) 
     OR EXISTS (SELECT 1 FROM SecondTable 
       WHERE FirstTable.Key = SecondTable.Key 
        and SecondTable.RowProcessed = 'Y')) 
AND OtherConditions