Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour les enregistrements de table à l'aide d'un CTE dans SQL ?
Utilisez CTE pour mettre à jour les enregistrements de la table
En SQL, vous pouvez utiliser des expressions de table communes (CTE) et des instructions UPDATE pour modifier les données d'une table. Un CTE est un alias ou un jeu de résultats temporaire qui peut être référencé dans les requêtes.
Pour mettre à jour les enregistrements d'une table à l'aide de CTE, vous pouvez utiliser une requête comme celle-ci :
<code class="language-sql">WITH CTE_DocTotal AS ( SELECT SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber ) UPDATE PEDI_InvoiceDetail SET DocTotal = CTE_DocTotal.DocTotal;</code>
Cette requête mettra à jour la valeur de la colonne DocTotal dans la table PEDI_InvoiceDetail avec la valeur de la colonne DocTotal dans le CTE CTE_DocTotal.
Cependant, dans votre cas, il manque dans la définition CTE un lien entre les tables CTE et PEDI_InvoiceDetail. Pour établir ce lien, vous ajoutez une clause de partitionnement au CTE comme suit :
<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>
Cette requête modifiée créera un nouveau CTE nommé T qui contient la colonne InvoiceNumber de la table PEDI_InvoiceDetail. Cela permet de partitionner les CTE par InvoiceNumber, garantissant que la valeur NewDocTotal est calculée correctement pour chaque facture.
L'instruction UPDATE applique ensuite la valeur NewDocTotal calculée à la colonne DocTotal de la table PEDI_InvoiceDetail.
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!