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中文網其他相關文章!