Как я могу обновить все строки, кроме одной в Postgres - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть таблица: -

|   num   | name     |  value |
----------------------------------
|    1    | name1    |   1    |
|    2    | name2    |   1    |
|    1    | name1    |   1    |
|    4    | name4    |   2    |
|    1    | name1    |   3    |

Я хочу обновить каждый столбец значений на 5 , за исключением одной строки , где столбец num и имя оба одинаковы

как Я пытался, если кто-нибудь исправляет это

UPDATE table t 
            SET
            value = 5
            FROM table  t2
            WHERE
            t1.num = t2.num AND
            t1.name = t2.name 

, но он обновляет все строки, я хочу, чтобы одна строка (любой) не обновлялась

1 Ответ

0 голосов
/ 27 апреля 2020

Использование row_number():

UPDATE table t 
    SET value = 5
    FROM (SELECT t2.*, ROW_NUMBER() OVER (PARTITION BY num, name ORDER BY num) as seqnum
          FROM table t2
         ) t2
    WHERE t.num = t2.num AND
          t.name = t2.name AND
          t2.seqnum > 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...