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

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

DDD
DDDoriginal
2025-01-12 22:46:44466parcourir

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

Mises à jour à requête unique dans PostgreSQL : une amélioration des performances

PostgreSQL, comme de nombreux systèmes de bases de données, propose des méthodes efficaces pour mettre à jour plusieurs lignes simultanément à l'aide d'une seule requête. Cette approche améliore considérablement les performances, en particulier lorsqu'il s'agit de jeux de données volumineux.

L'instruction UPDATE avec la clause SET fournit une méthode simple pour les mises à jour conditionnelles. Par exemple, pour modifier column_a en fonction de différentes valeurs dans column_b, vous pouvez utiliser cette syntaxe concise :

<code class="language-sql">UPDATE table_name
SET column_a = 1 WHERE column_b = '123',
    column_a = 2 WHERE column_b = '345';</code>

Cependant, pour les mises à jour plus complexes impliquant plusieurs colonnes, la construction UPDATE ... FROM offre une flexibilité supérieure. Cela implique de construire une table de mappage temporaire pour spécifier les mises à jour.

Illustrons avec un exemple mettant à jour à la fois column_a et column_c en fonction de column_b :

<code class="language-sql">UPDATE test AS t
SET column_a = c.column_a,
    column_c = c.column_c
FROM (VALUES
    ('123', 1, '---'),
    ('345', 2, '+++')
) AS c(column_b, column_a, column_c)
WHERE c.column_b = t.column_b;</code>

Cette requête exploite une clause VALUES pour définir la table de mappage c, liant efficacement les nouvelles valeurs aux lignes existantes dans test en fonction des valeurs column_b correspondantes. Cette approche simplifiée permet des mises à jour efficaces sur plusieurs colonnes au sein d'une seule requête.

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