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
还有更多选择,取决于你想做什么。
我是 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
还有更多选择,取决于你想做什么。