【问题标题】:SQL throwing "invalid identifier" errorSQL 抛出“无效标识符”错误
【发布时间】:2014-06-06 19:29:23
【问题描述】:

以下查询在别名“RANKING”上引发"00904. 00000 - "%s: invalid identifier" 错误。无法弄清楚为什么这不起作用。如果我消除“WHERE”子句,它会产生正确的结果。

SELECT RELEASE_NAME, 
 ROW_NUMBER() OVER(ORDER BY START_DATE DESC) AS RANKING
 FROM(
   SELECT RELEASE_NAME, MIN(START_DATE) AS START_DATE FROM RM_TASK_STATUS_VIEW
        WHERE RELEASE_NAME LIKE '%AU%' AND START_DATE IS NOT NULL
        GROUP BY RELEASE_NAME
        ORDER BY START_DATE
  ) 
WHERE RANKING IN (3,4);

【问题讨论】:

  • 您也将SELECT 中的别名称为WHERE 条件!您需要在WHERE 条件中再次使用整个表达式或再次对其进行子查询。因为别名不能在WHERE 子句中引用,而只能在ORDER BY 子句中引用。
  • 实际上,你不能在 where 子句中使用 row_number()。你会得到 SQL 错误:ORA-30483。

标签: sql oracle row-number where-in


【解决方案1】:

为您的查询创建一个派生表,并将 where 子句放在末尾。

select * from 
(your query, minus the where clause, goes here) temp
WHERE RANKING IN (3,4);

【讨论】:

  • 这很好用,谢谢!尽管@Stripthesoul 的解释会帮助我记住原因——我认为理解潜在问题比仅仅修复语法更重要(尽管有时你真的只需要语法)。
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 2012-04-24
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多