Rumah > pangkalan data > tutorial mysql > Bagaimana Mengemas kini Rekod Jadual dengan Cekap daripada CTE dalam SQL?

Bagaimana Mengemas kini Rekod Jadual dengan Cekap daripada CTE dalam SQL?

Mary-Kate Olsen
Lepaskan: 2025-01-08 14:46:41
asal
449 orang telah melayarinya

How to Efficiently Update Table Records from a CTE in 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.

Pernyataan

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan