sql >> Databáze >  >> RDS >> Mysql

příkaz UPDATE pro opětovné přiřazení hodnoty sloupce podle číselného vzorce

CASE prohlášení může pomoci. V tomto příkladu:

  • source , sam, je na pozici 8
  • target , bob, je na pozici 2

Následující příkaz nahradí proměnné skutečnými hodnotami a posune vše o 2 dolů od zdroje, ponechá mezi členy tak, jak jsou, nastaví cíl rovný zdroji a zbytek přesune dolů:

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)

To by posunulo něco výše v seznamu. Podobnou logiku lze použít pro pohyb v seznamu dolů. A předpokládá, že záporná čísla jsou v pořádku a že je zajímavé pouze relativní řazení.




  1. Django MySQL fulltextové vyhledávání

  2. Project Links nefungují na serveru Wamp

  3. Bolesti hlavy Mysql 5.6 na Mac OSX

  4. 2018 Recenze:7 milníků MariaDB, které jste možná zmeškali