Обновите таблицу Oracle, используя rownum и упорядочив по - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь обновить поле в таблице оракулов, но я бы хотел обновить только 75 строк на основе порядка по возрастанию поля создания.

Это то, что у меня есть, но оно не работает.

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

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Как упоминал @Gordon, вам нужно сделать ORDER BY перед ROWNUM.

Во-первых, упорядочить по 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
                 );
0 голосов
/ 28 сентября 2018

Для работы вашего метода требуется дополнительный подзапрос:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...