缺少 Oracle 查询的表达式

Missing Expression for the Oracle query

我正在尝试 运行 此查询,但我收到 表达式缺失错误

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

你能帮帮我吗,我错在哪里了。

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

将最后一个 where 子句替换为 "and",因为查询中已经存在 where

select star 在 Oracle(?) 中无法与其他显式列组合。您需要在子查询中用别名 A 限定星号。

 SELECT ROW_NUMBER() OVER(order by 'rownum') row_num1,
     A.*
  FROM A

这会导致 缺少表达式错误 - 之后您会看到其他错误

您在 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 足够聪明,可以在WHERE 子句中的其他条件 之后评估rownum 表达式

您必须添加一个别名,如果您也使用其他别名或函数,则不能在没有名称的情况下使用 *

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