Je cherche à mettre à jour plusieurs lignes dans PostgreSQL dans une seule déclaration. Existe-t-il un moyen de faire quelque chose comme ce qui suit?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
sql
postgresql
newUserNameHere
la source
la source
Réponses:
Vous pouvez également utiliser la
update ... from
syntaxe et utiliser une table de mappage. Si vous souhaitez mettre à jour plus d'une colonne, c'est beaucoup plus généralisable:Vous pouvez ajouter autant de colonnes que vous le souhaitez:
sql fiddle demo
la source
... from (values ('2014-07-21'::timestamp, 1), ('2014-07-20', 2), ...
Plus de détails dans la documentation PostgreSQLSur la base de la solution de @Roman, vous pouvez définir plusieurs valeurs:
la source
from (values $1)
Où $ 1 est un tableau de structures. Dans le cas ci-dessus, le strict aurait comme propriétés id, first_name et last_name.Oui, vous pouvez:
Et preuve de travail: http://sqlfiddle.com/#!2/97c7ea/1
la source
'123'
ni'345'
. Vous devriez utiliserWHERE column_b IN ('123','456')
...'456'
censé être'345'
ELSE column_b
après la dernièreWHEN ? THEN ?
ligne, la colonne sera définie sur sa valeur actuelle, empêchant ainsi ce que MatheusQI a dit de se produire.Je suis tombé sur un scénario similaire et l'expression CASE m'a été utile.
Rapports - est un tableau ici, account_id est le même pour les report_ids mentionnés ci-dessus. La requête ci-dessus définira 1 enregistrement (celui qui correspond à la condition) sur true et tous les enregistrements non correspondants sur false.
la source
Pour mettre à jour plusieurs lignes dans une seule requête, vous pouvez essayer ceci
si vous n'avez pas besoin de condition supplémentaire, supprimez une
and
partie de cette requêtela source
Supposons que vous ayez un tableau d' ID et un tableau équivalent de statuts - voici un exemple comment faire cela avec un SQL statique (une requête SQL qui ne change pas en raison de valeurs différentes) des tableaux:
la source