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!