我通过这个查询从表中获取数据
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);
不起作用。 如何获得与第一个查询相同的标记行?
排序是在应用
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
)