Оператор Update для обновления двух столбцов таблицы с использованием следующего значения столбца в той же таблице - PullRequest
0 голосов
/ 23 мая 2019

У меня есть таблица, в которой я хочу обновить два столбца. Ниже приведен пример:

Фактическая таблица:

Team    | PLAYERNUM|  NAME 
--------+----------+--------
A       |    1     |   ONE  | 
A       |    2     |   TWO  | 
A       |    3     |   THREE| 
B       |    1     |   FOUR | 
B       |    2     |   FIVE | 
B       |    3     |   SIX  |

Ожидаемый результат:

Team    |PLAYERNUM |  NAME 
--------+----------+--------
A       |    1     |   ONE  | 
A       |    2     |   TWO  | 
A       |    3     |   THREE| 
A       |    4     |   FOUR | 
A       |    5     |   FIVE | 
A       |    6     |   SIX  |

уникальное ограничение включено для столбцов «Команда» и «PLAYERNUM». Теперь я хочу обновить все строки с командой от «B» до «A». Я получаю уникальную ошибку нарушения ограничения, потому что PLAYERNUM уникальны. Любая подсказка о том, как обновить Team B и PLAYERNUM до 4 5 6.

1 Ответ

0 голосов
/ 23 мая 2019

Вы можете использовать common-table-expression с row_number() аналитической функцией окна для выполнения операции обновления:

update tab t
   set playernum = (
  with cte as (
    select t.*, row_number() over (order by Team,playernum) as rn
    from tab t 
  )
  select rn
    from  cte 
   where cte.team = t.team and cte.playernum = t.playernum
 ), team = 'A';

Демо

, если только команда столбца обновляется как team = 'A', вы получите ошибку нарушения ограничения первичного ключа (попробуйте в демоверсии), но вышеприведенный стиль не даст ошибки.

...