我正在尝试运行此查询,但我收到缺少表达式错误。
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(order by 'rownum') row_num1,
*
FROM A
WHERE refresh_date = (
SELECT max(refresh_date)
FROM A
WHERE upper(flaw_table_name) = upper('B')
)
)
WHERE row_num1 >= 1
AND row_num1 <=20
你可以帮助我,在我出错的地方。
答案 0 :(得分:2)
order by
子句中有一个常量。另外,首先放置rownum
是多余的。只需使用rownum
。
我想你想要:
SELECT A.*
FROM A
WHERE refresh_date = (SELECT max(refresh_date)
FROM A
WHERE upper(flaw_table_name) = upper('B')
) AND
rownum between 1 and 20;
子查询不是必需的,Oracle足够聪明,可以在rownum
子句中的其他条件之后评估WHERE
表达式。
答案 1 :(得分:1)
select star in Oracle(?)无法与其他explicite列结合使用。您需要使用子查询中的别名A限定星号。
SELECT ROW_NUMBER() OVER(order by 'rownum') row_num1,
A.*
FROM A
这导致缺少表达式错误 - 之后您会看到其他错误
答案 2 :(得分:0)
SELECT * from (
select ROW_NUMBER() OVER(order by 'rownum') row_num1, * from A
where refresh_date = ( Select max(refresh_date)
from A
where upper(flaw_table_name) = upper('B')
)
) where row_num1>= 1 and row_num1<=20
将
答案 3 :(得分:0)
你必须添加一个别名,如果你还使用其他的名字或功能,就不能使用*而不是名字
SELECT *
FROM (SELECT row_number() over(ORDER BY 'rownum') row_num1,
t.*
FROM a t
WHERE refresh_date =
(SELECT MAX(refresh_date)
FROM a
WHERE upper(flaw_table_name) = upper('B')))
WHERE row_num1 >= 1
AND row_num1 <= 20