Maison > base de données > tutoriel mysql > Comment puis-je mettre à jour les enregistrements de table à l'aide de valeurs calculées dans une expression de table commune (CTE) ?

Comment puis-je mettre à jour les enregistrements de table à l'aide de valeurs calculées dans une expression de table commune (CTE) ?

Susan Sarandon
Libérer: 2025-01-08 14:36:41
original
125 Les gens l'ont consulté

How Can I Update Table Records Using Values Calculated in a Common Table Expression (CTE)?

Mettre à jour les enregistrements à l'aide d'expressions communes (CTE)

Lorsque vous utilisez CTE pour mettre à jour les enregistrements de table, veillez à faire attention à la nature du CTE. Les CTE sont des collections temporaires qui existent uniquement pendant la requête pour laquelle elles sont définies. Par conséquent, toute modification apportée au CTE n’affectera pas directement la table source.

Pour surmonter cette limitation, une approche différente est nécessaire pour mettre à jour les enregistrements basés sur le CTE. Une approche efficace consiste à créer une sous-requête dans le CTE pour calculer la valeur requise. Cette sous-requête peut ensuite être utilisée dans une instruction UPDATE pour appliquer la valeur calculée à la table cible.

Considérez l'exemple suivant dans lequel vous souhaitez mettre à jour la colonne PEDI_InvoiceDetail dans la table DocTotal en fonction de la valeur calculée dans le CTE :

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

Ce CTE calcule le InvoiceNumber pour chaque DocTotal et stocke le résultat dans une collection temporaire. Pour mettre à jour la table PEDI_InvoiceDetail avec ces valeurs, vous pouvez utiliser une sous-requête dans le CTE :

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

Dans cette sous-requête, la fonction OVER avec la clause SUM() calcule un nouveau InvoiceNumber pour chaque partition (groupe) définie par DocTotal. Cette sous-requête est ensuite alias T et utilisée dans une instruction UPDATE pour mettre à jour la colonne DocTotal avec la valeur calculée.

Avec cette approche, vous pouvez mettre à jour efficacement l'enregistrement dans la table PEDI_InvoiceDetail en fonction de la valeur calculée dans le CTE, en garantissant que les modifications sont conservées dans la table source.

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