首頁 >資料庫 >mysql教程 >為什麼我不能直接比較 WHERE 子句中的別名,如何解決這個問題?

為什麼我不能直接比較 WHERE 子句中的別名,如何解決這個問題?

Barbara Streisand
Barbara Streisand原創
2025-01-19 15:26:10787瀏覽

Why Can't I Directly Compare Aliases in a WHERE Clause, and How Can I Work Around This?

WHERE 子句別名限制與解

問題:

table_a 查詢最近未更新的記錄時,在 WHERE 子句中使用別名會導致「ORA-00904 無效識別碼」錯誤。 出現這種情況是因為處理 MONTH_NO 子句時尚未定義別名 WHERE

這是一個例子:

<code class="language-sql">SELECT A.identifier
     , A.name
     , TO_NUMBER(DECODE( A.month_no, 1, 200803, ..., NULL)) as MONTH_NO
     , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A, table_b B
 WHERE A.identifier = B.identifier
   AND MONTH_NO > UPD_DATE</code>

解:

WHERE 子句在 子句之前執行SELECT,以防止直接使用別名。 解決方案是使用子查詢:

<code class="language-sql">SELECT * FROM
(
  SELECT A.identifier
    , A.name
    , TO_NUMBER(DECODE( A.month_no, 1, 200803, ..., NULL)) as MONTH_NO
    , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A, table_b B
  WHERE A.identifier = B.identifier
) AS inner_table
WHERE MONTH_NO > UPD_DATE</code>

此方法首先定義內部查詢中的別名。然後,外部查詢引用這些已定義的別名,解決「無效標識符」錯誤。 外部查詢中的 SELECT * 從內部查詢的結果集中選取所有欄位。

以上是為什麼我不能直接比較 WHERE 子句中的別名,如何解決這個問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn