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.
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>
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!