When 子句中的 DB2 RowNumber 相等性检查

DB2 RowNumber equality check in When clause

我是 DB2 的初学者。

当我开发查询时遇到错误代码问题 SQLCODE=-120,SQLSTATE=-42903

查询下是那个。

SELECT PHYSICAL_NAME||''
  FROM DEV_RESOURCE
  WHERE RESOURCE_ID = '40069684046725203038312337393001'
  AND ROWNUMBER() OVER() = 1 --This line is problem.
  WITH UR

我认为比较 ROWNUMBER() OVER() 和 1 是有问题的。 如何解决?

在 oracle 中查询(ROWNUMBER() OVER() -> ROWNUM)是可行的。

你不能在 where 子句中使用 rownumber,只能在执行查询之后。尝试这样的事情:

 select * from (
     SELECT PHYSICAL_NAME||'' as PHYSICAL_NAME,
     ROWNUMBER() OVER() as rang
     FROM DEV_RESOURCE
     WHERE RESOURCE_ID = '40069684046725203038312337393001'
 ) tmp
where tmp.rang=1

有几个选项。如果你只想 return 单行,你可以这样做:

SELECT PHYSICAL_NAME||''
  FROM DEV_RESOURCE
  WHERE RESOURCE_ID = '40069684046725203038312337393001'
  FETCH FIRST ROW ONLY
  WITH UR

DB2 具有上述语法,但也理解 MySQL 语法 (LIMIT)。另一种选择是像这样重写查询:

SELECT PHYSICAL_NAME||''
  FROM (select rownumber() over() as rn, DR.* from 
  DEV_RESOURCE DR 
  WHERE RESOURCE_ID = '40069684046725203038312337393001')
  WHERE RN=1
  WITH UR

还有更多选择,取决于你想做什么。