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中文网其他相关文章!