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