


Comment puis-je mettre à jour les enregistrements de table avec les valeurs calculées à partir d'un CTE ?
Jan 08, 2025 pm 02:40 PMMise à jour efficace des enregistrements de table à l'aide des CTE
Cet article explique comment mettre à jour correctement les enregistrements de table à l'aide d'une expression de table commune (CTE) pour calculer de nouvelles valeurs. Le but est de mettre à jour la colonne DocTotal
du tableau PEDI_InvoiceDetail
avec un total recalculé. Une tentative précédente a échoué car les mises à jour du CTE ne se sont pas propagées à la table de base.
Le défi
La mise à jour directe d'un tableau basé sur les valeurs calculées d'un CTE entraîne souvent des erreurs. Le CTE agit comme un ensemble de résultats temporaire ; les modifications qu'il contient ne mettent pas automatiquement à jour la table sous-jacente.
La solution
La solution implique un processus en deux étapes utilisant un CTE :
;WITH T AS ( SELECT InvoiceNumber, DocTotal, SUM(Sale + VAT) OVER (PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal;
Cette requête révisée :
-
Crée un CTE : Le CTE
T
sélectionneInvoiceNumber
, l'originalDocTotal
, et calcule un nouveauDocTotal
(NewDocTotal
) à l'aide de la fonctionSUM() OVER (PARTITION BY InvoiceNumber)
. Cela regroupe efficacementSale VAT
pour chaqueInvoiceNumber
unique. -
Mise à jour la table de base : L'instruction
UPDATE
cible ensuite directement le CTET
, en définissant leDocTotal
d'origine sur leNewDocTotal
nouvellement calculé. Cela garantit que les modifications sont appliquées à laPEDI_InvoiceDetail
table.
Concepts clés
-
OVER (PARTITION BY ...)
: Cette clause cruciale divise les données parInvoiceNumber
, permettant à la fonctionSUM()
de calculer le total de chaque facture séparément.
Cette approche fournit une méthode propre et efficace pour mettre à jour les enregistrements avec des valeurs calculées dérivées d'un CTE, évitant ainsi les pièges courants liés à la tentative de modification du CTE lui-même.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
