[英]Update Oracle Table using rownum and order by
Im trying to update a field in an oracle table, but I would only like to update 75 rows based on the order by creationdate field ascending. 我正在尝试更新oracle表中的字段,但我只想根据creationdate字段升序的顺序来更新75行。
This is what I have so far, but its not working. 到目前为止,这是我所拥有的,但是没有用。
UPDATE extractcandidate
SET process = 15
WHERE process IN
(Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate);
As @Gordon mentioned, you need to do the ORDER BY
before the ROWNUM
. 如@Gordon所述,您需要在ROWNUM
之前执行ORDER BY
。
Firstly, order by creationdate
: 首先,按creationdate
排序:
SELECT *
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate;
Secondly, limit the number to 75: 其次,将数量限制为75:
SELECT *
FROM (
SELECT *
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate
)
WHERE rownum <= 75;
Now you can feed it into the UPDATE
. 现在,您可以将其输入到UPDATE
。 To find the correct rows, you would normally use a primary key column. 为了找到正确的行,通常会使用主键列。 This seems to be missing in your case, so you can fall back to Oracle's internal ROWID
: 您的情况似乎不存在这种情况,因此您可以使用Oracle的内部ROWID
:
UPDATE extractcandidate
SET process=15
WHERE rowid IN (
SELECT ri
FROM (
SELECT rowid as ri
FROM extractcandidate
WHERE process=1500
ORDER BY creationdate
)
WHERE rownum <= 75
);
You need an additional subquery for your method to work: 您需要一个附加的子查询来使您的方法起作用:
UPDATE extractcandidate
SET process = 15
WHERE ec.process = 1500 AND
creationdate IN (SELECT ec.creationdate
FROM (SELECT ec.*
FROM extractcandidate ec
WHERE ec.process = 1500
ORDER BY ec.creationdate
)
WHERE rownum <= 75
);
Notes: 笔记:
rownum
. 您需要在使用rownum
之前进行排序。 process
. 比较必须是在创建日期,而不是process
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.