Heim > Datenbank > MySQL-Tutorial > Wie kann ich Tabellendatensätze mithilfe von Werten aktualisieren, die in einem Common Table Expression (CTE) berechnet werden?

Wie kann ich Tabellendatensätze mithilfe von Werten aktualisieren, die in einem Common Table Expression (CTE) berechnet werden?

Susan Sarandon
Freigeben: 2025-01-08 14:36:41
Original
126 Leute haben es durchsucht

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

Aktualisieren Sie Datensätze mithilfe allgemeiner Ausdrücke (CTE)

Wenn Sie CTE zum Aktualisieren von Tabellendatensätzen verwenden, achten Sie unbedingt auf die Art des CTE. CTEs sind temporäre Sammlungen, die nur während der Abfrage existieren, für die sie definiert sind. Daher wirken sich alle am CTE vorgenommenen Änderungen nicht direkt auf die Quelltabelle aus.

Um diese Einschränkung zu überwinden, ist ein anderer Ansatz erforderlich, um Datensätze basierend auf CTE zu aktualisieren. Ein effizienter Ansatz besteht darin, im CTE eine Unterabfrage zu erstellen, um den erforderlichen Wert zu berechnen. Diese Unterabfrage kann dann in einer UPDATE-Anweisung verwendet werden, um den berechneten Wert auf die Zieltabelle anzuwenden.

Betrachten Sie das folgende Beispiel, in dem Sie die Spalte PEDI_InvoiceDetail in der Tabelle DocTotal basierend auf dem im CTE berechneten Wert aktualisieren möchten:

<code class="language-sql">;WITH CTE_DocTotal AS
(
  SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal
  FROM PEDI_InvoiceDetail
  GROUP BY InvoiceNumber
)</code>
Nach dem Login kopieren

Dieser CTE berechnet das InvoiceNumber für jedes DocTotal und speichert das Ergebnis in einer temporären Sammlung. Um die PEDI_InvoiceDetail-Tabelle mit diesen Werten zu aktualisieren, können Sie eine Unterabfrage im CTE verwenden:

<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>
Nach dem Login kopieren

In dieser Unterabfrage berechnet die Funktion OVER mit der Klausel SUM() ein neues InvoiceNumber für jede durch DocTotal definierte Partition (Gruppe). Diese Unterabfrage wird dann mit einem Alias ​​auf T versehen und in einer UPDATE-Anweisung verwendet, um die Spalte DocTotal mit dem berechneten Wert zu aktualisieren.

Mit diesem Ansatz können Sie den Datensatz in der Tabelle PEDI_InvoiceDetail basierend auf dem im CTE berechneten Wert effektiv aktualisieren und so sicherstellen, dass die Änderungen in der Quelltabelle beibehalten werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Tabellendatensätze mithilfe von Werten aktualisieren, die in einem Common Table Expression (CTE) berechnet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage