sql >> Database teknologi >  >> RDS >> Mysql

UPDATE-sætning for at gentildele en kolonneværdi i henhold til en numerisk formel

En CASE udtalelse kan hjælpe. I dette eksempel:

  • source , sam, er i position 8
  • target , bob, er i position 2

Ved at erstatte variablerne med de faktiske værdier, flytter følgende sætning alt ned 2 fra kilden, efterlader mellem medlemmer som de er, sætter målet lig med kilden, flytter resten ned:

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)

Det ville rykke noget op på listen. Lignende logik kunne anvendes til at flytte ned på en liste. Og det antager, at negative tal er fine, og at kun den relative rækkefølge er af interesse.




  1. SQL Server-historiktabel - udfyldes via SP eller Trigger?

  2. Indsættelse af flere rækker med sekvens i Oracle

  3. kontrollere, om forespørgslen resulterer i tom række mysqli

  4. Introduktion til HDFS | Hvad er HDFS, og hvordan virker det?