sql >> Database >  >> RDS >> Mysql

UPDATE-instructie om een ​​kolomwaarde opnieuw toe te wijzen volgens een numerieke formule

Een CASE verklaring kan helpen. In dit voorbeeld:

  • de source , sam, staat op positie 8
  • het target , bob, staat op positie 2

Door de variabelen te vervangen door de werkelijke waarden, verschuift de volgende instructie alles 2 naar beneden vanaf de bron, laat de tussenleden zoals ze zijn, stelt het doel gelijk aan de bron, verplaatst de rest naar beneden:

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)

Dat zou iets op de lijst zetten. Soortgelijke logica kan worden toegepast om een ​​lijst omlaag te gaan. En het gaat ervan uit dat negatieve getallen prima zijn en dat alleen de relatieve volgorde van belang is.




  1. Hoe verwerkt MySQL ORDER BY en LIMIT in een query?

  2. Rails 3 ActiveRecord:Sorteren op telling op associatie

  3. JDBC - Oracle ArrayIndexOutOfBoundsException

  4. Haal de dag van een datum in PostgreSQL