Heim >Datenbank >MySQL-Tutorial >Wie kann ich Tabellendatensätze mithilfe eines CTE in SQL aktualisieren?

Wie kann ich Tabellendatensätze mithilfe eines CTE in SQL aktualisieren?

Susan Sarandon
Susan SarandonOriginal
2025-01-08 14:43:10857Durchsuche

How Can I Update Table Records Using a CTE in SQL?

Verwenden Sie CTE, um Tabellendatensätze zu aktualisieren

In SQL können Sie Common Table Expressions (CTE) und UPDATE-Anweisungen verwenden, um Daten in einer Tabelle zu ändern. Ein CTE ist ein Alias ​​oder eine temporäre Ergebnismenge, auf die in Abfragen verwiesen werden kann.

Um Datensätze in einer Tabelle mithilfe von CTE zu aktualisieren, können Sie eine Abfrage wie diese verwenden:

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

Diese Abfrage aktualisiert den Wert der DocTotal-Spalte in der PEDI_InvoiceDetail-Tabelle mit dem Wert der DocTotal-Spalte im CTE_DocTotal CTE.

In Ihrem Fall fehlt jedoch in der CTE-Definition eine Verknüpfung zwischen den Tabellen CTE und PEDI_InvoiceDetail. Um diese Verknüpfung herzustellen, fügen Sie dem CTE wie folgt eine Partitionierungsklausel hinzu:

<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 geänderte Abfrage erstellt einen neuen CTE mit dem Namen T, der die InvoiceNumber-Spalte aus der PEDI_InvoiceDetail-Tabelle enthält. Dies ermöglicht die Partitionierung von CTEs nach InvoiceNumber und stellt sicher, dass der NewDocTotal-Wert für jede Rechnung korrekt berechnet wird.

Die UPDATE-Anweisung wendet dann den berechneten NewDocTotal-Wert auf die DocTotal-Spalte in der PEDI_InvoiceDetail-Tabelle an.

Das obige ist der detaillierte Inhalt vonWie kann ich Tabellendatensätze mithilfe eines CTE in SQL 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