在Oracle 10.2 中的WHERE 子句中使用「Case 表達式列」
在Oracle 10.2 中,嘗試執行以下操作時會發生ORA-00904 錯誤在WHERE 子句中使用case 表達式列。這是由於 SQL 語句的邏輯處理順序造成的,其中在選擇列之前先評估 WHERE 條件。
錯誤說明:
SQL 語句在邏輯處理中以下順序:
在提供的查詢中,WHERE 子句嘗試使用計算出的部門列在 CASE 表達式中。但是,直到 WHERE 子句執行之後才填入此列,導致錯誤。
解決方案1:子查詢封裝SELECT * FROM ( SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES' ;
解決方案2:條件複製
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES' ;
替代方案:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
以上是如何在 Oracle 10.2 查詢的 WHERE 子句中使用 CASE 表達式列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!