首頁 > 資料庫 > mysql教程 > 如何在 Oracle 10.2 查詢的 WHERE 子句中使用 CASE 表達式列?

如何在 Oracle 10.2 查詢的 WHERE 子句中使用 CASE 表達式列?

Linda Hamilton
發布: 2025-01-04 22:46:42
原創
768 人瀏覽過

How Can I Use a CASE Expression Column in the WHERE Clause of an Oracle 10.2 Query?

在Oracle 10.2 中的WHERE 子句中使用「Case 表達式列」

在Oracle 10.2 中,嘗試執行以下操作時會發生ORA-00904 錯誤在WHERE 子句中使用case 表達式列。這是由於 SQL 語句的邏輯處理順序造成的,其中在選擇列之前先評估 WHERE 條件。

錯誤說明:

SQL 語句在邏輯處理中以下順序:

  • FROM:表選擇和行組合
  • WHERE:依條件進行行過濾
  • GROUP BY:行分組
  • HAVING:附加行過濾
  • SELECT:列選擇
  • DISTINCT:重複行刪除
  • UNION/EXCEPT/INTERSINCT:重複行刪除
  • UNION/EXCEPT/INTERSECTT操作
ORDER BY:行排序

在提供的查詢中,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' ;
登入後複製
複製WHERE條件中的CASE表達式:

替代方案:

SELECT ename
     , job
     , 'SALES' AS department
FROM emp
WHERE deptno = 20 ;
登入後複製
如果可行,請考慮使用更簡單的查詢:

以上是如何在 Oracle 10.2 查詢的 WHERE 子句中使用 CASE 表達式列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板