PostgreSQL : rationaliser les mises à jour de plusieurs lignes
PostgreSQL offre des méthodes efficaces pour mettre à jour plusieurs lignes simultanément, un avantage significatif lorsqu'il s'agit de jeux de données volumineux ou de conditions de mise à jour complexes. Contrairement aux instructions UPDATE
individuelles par ligne du SQL traditionnel, PostgreSQL propose deux alternatives supérieures :
Approche 1 : Mises à jour conditionnelles avec CASE
L'expression CASE
permet d'attribuer différentes valeurs aux lignes en fonction de critères spécifiques. La structure de l'instruction UPDATE
est :
<code class="language-sql">UPDATE table_name SET column_name = CASE WHEN condition1 THEN value1 WHEN condition2 THEN value2 ... ELSE default_value END WHERE condition;</code>
Par exemple, pour définir column_a
sur 1 où column_b
est '123' et sur 2 où column_b
est '345' :
<code class="language-sql">UPDATE table_name SET column_a = CASE WHEN column_b = '123' THEN 1 WHEN column_b = '345' THEN 2 ELSE column_a -- Retain original value if condition not met END WHERE column_b IN ('123', '345');</code>
Approche 2 : UPDATE...FROM pour des mises à jour concises
La construction UPDATE...FROM
utilise une table ou une sous-requête distincte pour définir les valeurs de mise à jour, ce qui donne un code plus propre et plus lisible. La syntaxe est :
<code class="language-sql">UPDATE table_name SET column_names = (SELECT column_names FROM subquery) WHERE condition;</code>
Appliquer ceci à l'exemple précédent :
<code class="language-sql">UPDATE table_name AS t SET column_a = c.column_a FROM ( VALUES ('123', 1), ('345', 2) ) AS c(column_b, column_a) WHERE c.column_b = t.column_b;</code>
Ces techniques PostgreSQL améliorent considérablement l'efficacité et la clarté du code par rapport aux UPDATE
instructions individuelles, en particulier pour la manipulation de données à grande échelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!