Mysql
 sql >> Base de données >  >> RDS >> Mysql

Instruction UPDATE pour réaffecter une valeur de colonne selon une formule numérique

Un CASE déclaration peut aider. Dans cet exemple :

  • la source , sam, est en position 8
  • la target , bob, est en position 2

En remplaçant les variables par les valeurs réelles, l'instruction suivante décale tout vers le bas de 2 à partir de la source, laisse les membres entre tels quels, définit la cible égale à la source, déplace le reste vers le bas :

postgres=> SELECT * FROM test order by sortval;
 name | sortval
------+---------
 bob  |       2
 tom  |       4
 mary |       6
 sam  |       8
 tim  |      10
(5 rows)


postgres=>      UPDATE test
postgres->        SET sortval = CASE WHEN sortval <= 2 THEN sortval - 2
postgres->                           WHEN sortval = 8  THEN 2
postgres->                           WHEN sortval >= 8 THEN sortval - 2
postgres->                           ELSE sortval
postgres->                           END;
UPDATE 5
postgres=> SELECT * FROM test order by sortval;
 name | sortval
------+---------
 bob  |       0
 sam  |       2
 tom  |       4
 mary |       6
 tim  |       8
(5 rows)

Cela déplacerait quelque chose vers le haut de la liste. Une logique similaire pourrait être appliquée pour descendre dans une liste. Et il suppose que les nombres négatifs conviennent et que seul l'ordre relatif est intéressant.