Heim >Datenbank >MySQL-Tutorial >Wie aktualisiere ich Tabellendatensätze effizient von einem CTE in SQL?
Verwenden Sie CTE, um Tabellendatensätze effizient zu aktualisieren
Der folgende Codeausschnitt zeigt, wie Tabellendatensätze mithilfe allgemeiner Tabellenausdrücke (CTE) effizient aktualisiert werden. Der CTE CTE_DocTotal
im Code berechnet den PEDI_InvoiceDetail
für jede Rechnung, indem er die Spalten Sale
und VAT
in der Tabelle DocTotal
zusammenfasst. Das Ziel besteht darin, die Spalte PEDI_InvoiceDetail
in der Tabelle DocTotal
mit dem im CTE berechneten Wert zu aktualisieren.
Der Originalcode weist jedoch eine Einschränkung auf: Aktualisierungen des CTE werden nicht automatisch in der Quelltabelle widergespiegelt (PEDI_InvoiceDetail
). Um die gewünschten Ergebnisse zu erzielen, muss der Code geändert werden.
Verbesserungsplan:
Der verbesserte Code verwendet einen anderen CTE mit dem Namen T
, der InvoiceNumber
, DocTotal
und einen neu berechneten Sale
basierend auf den VAT
- und DocTotal
-Werten für jede Rechnung abruft. Dieses neue DocTotal
wird mithilfe der OVER()
-Klausel und der PARTITION BY
-Klausel ausgewertet, um sicherzustellen, dass die Auswertung für jede InvoiceNumber
-Gruppierung durchgeführt wird.
UPDATE
-Anweisung verwendet dann den CTE T
, um den NewDocTotal
-Wert der Spalte DocTotal
zuzuweisen. Dadurch wird die Spalte PEDI_InvoiceDetail
in der Tabelle DocTotal
effektiv mit dem überarbeiteten Wert der CTE-Berechnung aktualisiert.
Das Folgende ist der geänderte Code:
<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>
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich Tabellendatensätze effizient von einem CTE in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!