2013-07-19 73 views
3

我使用iReport通過Oracle數據庫創建報告。我必須根據這樣的條件選擇一些值:執行SQL中只有一個存在

AND EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y) 
OR EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y) 

只有第一個是錯誤的時候才能執行第二個EXISTS嗎?

回答

7

嘗試使用您的條件括號:

AND (
     EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y) 
    OR EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y) 
    ) 
+1

我測試過我的數據與消協的解決了這個解決方案。這對我來說是最快的。查詢的成本也有很大的差異,這個解決方案的成本是3360(在我的查詢中顯然)與成本超過10萬的案例解決方案。 – noizer

+0

@noizer - 是的。它更快,更易於理解。 :) – hims056

0
AND (case when (SELECT count(*) FROM TABLE_1 WHERE x = y) > 0 then true 
when (SELECT count(*) FROM TABLE_2 WHERE z = y) > 0 then true 
else false end) 
1

使用CASE

where 
... 
AND 1 = case 
      when EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y) then 1 
      when EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y) then 1 
      else 0 
     end