Maison > base de données > tutoriel mysql > Comment mettre à jour efficacement les enregistrements de table à partir d'un CTE en SQL ?

Comment mettre à jour efficacement les enregistrements de table à partir d'un CTE en SQL ?

Mary-Kate Olsen
Libérer: 2025-01-08 14:46:41
original
453 Les gens l'ont consulté

How to Efficiently Update Table Records from a CTE in SQL?

Utilisez CTE pour mettre à jour efficacement les enregistrements de table

L'extrait de code suivant montre comment mettre à jour efficacement les enregistrements de table à l'aide d'expressions de table communes (CTE). Le CTE CTE_DocTotal dans le code calcule le PEDI_InvoiceDetail pour chaque facture en résumant les colonnes Sale et VAT dans le tableau DocTotal. Le but est de mettre à jour la colonne PEDI_InvoiceDetail du tableau DocTotal avec la valeur calculée dans le CTE.

Cependant, le code original a une limitation : les mises à jour du CTE ne sont pas automatiquement répercutées dans la table source (PEDI_InvoiceDetail). Pour obtenir les résultats souhaités, le code doit être modifié.

Plan d'amélioration :

Le code amélioré utilise un CTE différent, nommé T, qui récupère InvoiceNumber, DocTotal, et un Sale recalculé en fonction des valeurs VAT et DocTotal pour chaque facture. Ce nouveau DocTotal est évalué à l'aide de la clause OVER() et de la clause PARTITION BY, garantissant que l'évaluation est effectuée pour chaque InvoiceNumber regroupement.

L'instruction

UPDATE utilise ensuite le CTE T pour attribuer la valeur NewDocTotal à la colonne DocTotal. Cela met effectivement à jour la colonne PEDI_InvoiceDetail du tableau DocTotal avec la valeur révisée du calcul du CTE.

Voici le code modifié :

<code class="language-sql">WITH T AS
(
   SELECT  InvoiceNumber, 
            DocTotal, 
            SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
    FROM    PEDI_InvoiceDetail
)
UPDATE  T
SET     DocTotal = NewDocTotal;</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal