Heim >Datenbank >MySQL-Tutorial >Wie kann ich Tabellendatensätze mit berechneten Werten aus einem CTE aktualisieren?
Effiziente Aktualisierung von Tabellendatensätzen mithilfe von CTEs
In diesem Artikel wird erläutert, wie Sie Tabellendatensätze mithilfe eines Common Table Expression (CTE) korrekt aktualisieren, um neue Werte zu berechnen. Das Ziel besteht darin, die Spalte DocTotal
in der Tabelle PEDI_InvoiceDetail
mit einer neu berechneten Summe zu aktualisieren. Ein früherer Versuch schlug fehl, weil Aktualisierungen des CTE nicht an die Basistabelle weitergegeben wurden.
Die Herausforderung
Das direkte Aktualisieren einer Tabelle basierend auf den berechneten Werten eines CTE führt oft zu Fehlern. Der CTE fungiert als temporärer Ergebnissatz; Änderungen darin aktualisieren nicht automatisch die zugrunde liegende Tabelle.
Die Lösung
Die Lösung umfasst einen zweistufigen Prozess unter Verwendung eines CTE:
<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>
Diese überarbeitete Abfrage:
Erstellt einen CTE: Der CTE T
wählt InvoiceNumber
, das ursprüngliche DocTotal
, aus und berechnet mithilfe der Funktion DocTotal
einen neuen NewDocTotal
(SUM() OVER (PARTITION BY InvoiceNumber)
). Dadurch wird Sale VAT
für jedes einzelne InvoiceNumber
effizient aggregiert.
Aktualisiert die Basistabelle: Die UPDATE
-Anweisung zielt dann direkt auf den CTE T
ab und setzt den ursprünglichen DocTotal
auf den neu berechneten NewDocTotal
. Dadurch wird sichergestellt, dass die Änderungen auf die Tabelle PEDI_InvoiceDetail
angewendet werden.
Schlüsselkonzepte
OVER (PARTITION BY ...)
: Diese entscheidende Klausel unterteilt die Daten nach InvoiceNumber
, sodass die Funktion SUM()
den Gesamtbetrag für jede Rechnung separat berechnen kann.Dieser Ansatz bietet eine saubere und effiziente Methode zum Aktualisieren von Datensätzen mit berechneten Werten, die von einem CTE abgeleitet werden, und vermeidet die üblichen Fallstricke beim Versuch, den CTE selbst zu ändern.
Das obige ist der detaillierte Inhalt vonWie kann ich Tabellendatensätze mit berechneten Werten aus einem CTE aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!