Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual dengan Nilai Dikira daripada CTE?

Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual dengan Nilai Dikira daripada CTE?

Mary-Kate Olsen
Lepaskan: 2025-01-08 14:40:39
asal
670 orang telah melayarinya

How Can I Update Table Records with Calculated Values from a CTE?

Mengemaskini Rekod Jadual Menggunakan CTE dengan Cekap

Artikel ini menerangkan cara mengemas kini rekod jadual dengan betul menggunakan Common Table Expression (CTE) untuk mengira nilai baharu. Matlamatnya adalah untuk mengemas kini lajur DocTotal dalam jadual PEDI_InvoiceDetail dengan jumlah yang dikira semula. Percubaan sebelumnya gagal kerana kemas kini kepada CTE tidak disebarkan ke jadual asas.

Cabarannya

Mengemas kini jadual secara langsung berdasarkan nilai pengiraan CTE selalunya membawa kepada ralat. CTE bertindak sebagai set hasil sementara; perubahan di dalamnya tidak mengemas kini jadual asas secara automatik.

Penyelesaian

Penyelesaian melibatkan proses dua langkah menggunakan CTE:

<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

Pertanyaan yang disemak ini:

  1. Mencipta CTE: CTE T memilih InvoiceNumber, yang asal DocTotal dan mengira DocTotal (NewDocTotal) baharu menggunakan fungsi SUM() OVER (PARTITION BY InvoiceNumber). Ini dengan cekap mengagregatkan Sale VAT untuk setiap InvoiceNumber unik.

  2. Mengemas kini Jadual Asas: Pernyataan UPDATE kemudian secara langsung menyasarkan CTE T, menetapkan DocTotal asal kepada NewDocTotal yang baru dikira. Ini memastikan perubahan digunakan pada jadual PEDI_InvoiceDetail.

Konsep Utama

  • OVER (PARTITION BY ...): Klausa penting ini membahagikan data dengan InvoiceNumber, membenarkan fungsi SUM() mengira jumlah bagi setiap invois secara berasingan.

Pendekatan ini menyediakan kaedah yang bersih dan cekap untuk mengemas kini rekod dengan nilai terkira yang diperoleh daripada CTE, mengelakkan perangkap biasa cuba mengubah suai CTE itu sendiri.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual dengan Nilai Dikira daripada CTE?. 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