簡體   English   中英

Oracle查詢缺少表達式

[英]Missing Expression for the Oracle query

我正在嘗試運行此查詢,但出現了Missing Expression錯誤

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

如果我出了問題,請您幫我一下。

您在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星號在Oracle(?)中,無法與其他顯式列結合使用。 您需要在子查詢中使用別名A限定星星。

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

這導致缺少表達式錯誤 -之后,您將看到其他錯誤

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子句替換為“和” ,因為查詢中已經存在where

您必須添加別名,如果您也使用其他名稱或功能,則不能使用*不帶名稱

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM