Heim >Datenbank >MySQL-Tutorial >Wie kann ich Tabellendatensätze mit berechneten Werten aus einem CTE aktualisieren?

Wie kann ich Tabellendatensätze mit berechneten Werten aus einem CTE aktualisieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-08 14:40:39675Durchsuche

How Can I Update Table Records with Calculated Values from a CTE?

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:

  1. 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.

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn