Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour efficacement plusieurs lignes dans une seule requête PostgreSQL ?

Comment puis-je mettre à jour efficacement plusieurs lignes dans une seule requête PostgreSQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-12 22:37:47850parcourir

How Can I Efficiently Update Multiple Rows in a Single PostgreSQL Query?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn