[英]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.