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!