簡體   English   中英

使用rownum更新Oracle Table並按以下順序排序

[英]Update Oracle Table using rownum and order by

我正在嘗試更新oracle表中的字段,但我只想根據creationdate字段升序的順序來更新75行。

到目前為止,這是我所擁有的,但是沒有用。

UPDATE extractcandidate
SET process = 15
WHERE process IN
(Select process from extractcandidate where process = 1500 and rownum <=75 order by creationdate);

如@Gordon所述,您需要在ROWNUM之前執行ORDER BY

首先,按creationdate排序:

SELECT *
  FROM extractcandidate
 WHERE process=1500
 ORDER BY creationdate;

其次,將數量限制為75:

SELECT * 
  FROM (
        SELECT *
          FROM extractcandidate
         WHERE process=1500
         ORDER BY creationdate
       ) 
  WHERE rownum <= 75;

現在,您可以將其輸入到UPDATE 為了找到正確的行,通常會使用主鍵列。 您的情況似乎不存在這種情況,因此您可以使用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
                 );

您需要一個附加的子查詢來使您的方法起作用:

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
                          );

筆記:

  • 您需要在使用rownum之前進行排序。
  • 比較必須是在創建日期,而不是process

暫無
暫無

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

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