Rumah >pangkalan data >tutorial mysql >Bagaimana Mengemas kini Rekod Jadual dengan Cekap daripada CTE dalam SQL?
Gunakan CTE untuk mengemas kini rekod jadual dengan cekap
Coretan kod berikut menunjukkan cara mengemas kini rekod jadual dengan cekap menggunakan ungkapan jadual biasa (CTE). CTE CTE_DocTotal
dalam kod mengira PEDI_InvoiceDetail
untuk setiap invois dengan meringkaskan lajur Sale
dan VAT
dalam jadual DocTotal
. Matlamatnya adalah untuk mengemas kini lajur PEDI_InvoiceDetail
dalam jadual DocTotal
dengan nilai yang dikira dalam CTE.
Walau bagaimanapun, kod asal mempunyai had: kemas kini kepada CTE tidak dipaparkan secara automatik ke jadual sumber (PEDI_InvoiceDetail
). Untuk mencapai hasil yang dikehendaki, kod tersebut perlu diubah suai.
Pelan penambahbaikan:
Kod yang dipertingkat menggunakan CTE yang berbeza, bernama T
, yang mendapatkan semula InvoiceNumber
, DocTotal
dan Sale
yang dikira semula berdasarkan nilai VAT
dan DocTotal
untuk setiap invois. DocTotal
baharu ini dinilai menggunakan klausa OVER()
dan klausa PARTITION BY
, memastikan penilaian dilakukan untuk setiap kumpulan InvoiceNumber
.
UPDATE
kemudian menggunakan CTE T
untuk menetapkan nilai NewDocTotal
pada lajur DocTotal
. Ini dengan berkesan mengemas kini lajur PEDI_InvoiceDetail
dalam jadual DocTotal
dengan nilai semakan semula pengiraan CTE.
Berikut ialah kod yang diubah suai:
<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>
Atas ialah kandungan terperinci Bagaimana Mengemas kini Rekod Jadual dengan Cekap daripada CTE dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!