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