Mise à jour de plusieurs lignes avec une clé primaire différente dans une requête dans PostgreSQL?
- Je mettre à jour autant de colonnes dans de nombreuses lignes de PostgreSQL 9.1. Je suis en train de le faire avec beaucoup de différents UPDATE
requêtes, chacun qui travaille sur une autre ligne (basée sur la clé primaire):
UPDATE mytable SET column_a = 12, column_b = 6 WHERE id = 1;
UPDATE mytable SET column_a = 1, column_b = 45 WHERE id = 2;
UPDATE mytable SET column_a = 56, column_b = 3 WHERE id = 3;
Que j'ai à faire plusieurs milliers de ces requêtes.
Est-il de toute façon je peux "mise à jour en bloc" beaucoup de lignes d'une requête dans PostgreSQL? Si vous utilisez INSERT
vous pouvez insérer plusieurs lignes à la fois: (INSERT INTO mytable (column_a, column_b) VALUES ( (12, 6), (1, 45) );
), Est-il quelque chose comme ça pour UPDATE
?
Quelque chose comme:
UPDATE mytable SET (id, column_a, column_b) FROM VALUES ( (1, 12, 6), (2, 1, 45), (3, 56, 3), … )
??
Les points importants est que chaque "VALEUR" n'est mis à jour une ligne (basé sur le WHERE id =
). Chaque ligne aura de même, nombre fixe de colonnes qui doivent mettre à jour, mais chaque ligne ont des valeurs différentes pour chaque colonne, de sorte UPDATE mytable SET column_a = 12, column_b = 6 WHERE id IN (1, 2, 3);
ne fonctionne pas.
source d'informationauteur Rory
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez (et généralement il est préféré dans SQL) pour mettre à jour plusieurs lignes à la fois. Il ya quelques façons de le faire, mais la plus lisible et élégant, je pense, est d'utiliser des dérivés de la table avec l'id et valeurs:
Pas si lisible, mais en plus évident que la meilleure solution serait d'utiliser
case
:Si cette applicables à votre cas vous pouvez l'utiliser.
SQL VIOLON DÉMO