我使用iReport通過Oracle數據庫創建報告。我必須根據這樣的條件選擇一些值:執行SQL中只有一個存在
AND EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y)
OR EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y)
只有第一個是錯誤的時候才能執行第二個EXISTS嗎?
我使用iReport通過Oracle數據庫創建報告。我必須根據這樣的條件選擇一些值:執行SQL中只有一個存在
AND EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y)
OR EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y)
只有第一個是錯誤的時候才能執行第二個EXISTS嗎?
嘗試使用您的條件括號:
AND (
EXISTS (SELECT 1 FROM TABLE_1 WHERE x = y)
OR EXISTS (SELECT 1 FROM TABLE_2 WHERE z = y)
)
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)
使用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
我測試過我的數據與消協的解決了這個解決方案。這對我來說是最快的。查詢的成本也有很大的差異,這個解決方案的成本是3360(在我的查詢中顯然)與成本超過10萬的案例解決方案。 – noizer
@noizer - 是的。它更快,更易於理解。 :) – hims056