oracle sql。如何管理ORDER BY和ROWNUM

问题描述 投票:0回答:1

我通过这个查询从表中获取数据

SELECT ID, .... FROM TAB WHERE ROWNUM<100 ORDER BY ID;

然后,我应该将行标记为已读:

UPDATE TAB SET READ = '1' WHERE ID IN (SELECT ID FROM TAB WHERE ROWNUM<100);

检查数据,我发现标记的行与第一个查询检索到的行不同。我尝试在更新查询中强制排序,但是

UPDATE TAB SET READ = '1' WHERE ID IN (SELECT ID FROM TAB WHERE ROWNUM<100 ORDER BY ID);

不起作用。 如何获得与第一个查询相同的标记行?

oracle sorting rownum
1个回答
1
投票

排序是在应用

ROWNUM<100
之后完成的,导致结果不一致。要更改此顺序,您可以执行以下操作:

UPDATE TAB 
SET READ = '1' 
WHERE ID IN (
  SELECT ID 
  FROM TAB 
  ORDER BY ID 
  FETCH FIRST 99 ROWS ONLY
);

或者:

UPDATE TAB 
SET READ = '1' 
WHERE ID IN (
  SELECT ID FROM (
    SELECT ID 
    FROM TAB 
    ORDER BY ID
  ) 
  WHERE ROWNUM <100
)
© www.soinside.com 2019 - 2024. All rights reserved.