Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual Menggunakan Nilai Dikira dalam Ungkapan Jadual Biasa (CTE)?

Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual Menggunakan Nilai Dikira dalam Ungkapan Jadual Biasa (CTE)?

Susan Sarandon
Lepaskan: 2025-01-08 14:36:41
asal
126 orang telah melayarinya

How Can I Update Table Records Using Values Calculated in a Common Table Expression (CTE)?

Kemas kini rekod menggunakan ungkapan biasa (CTE)

Apabila menggunakan CTE untuk mengemas kini rekod jadual, pastikan anda memberi perhatian kepada sifat CTE. CTE ialah koleksi sementara yang wujud hanya semasa pertanyaan yang ditakrifkan. Oleh itu, sebarang perubahan yang dibuat pada CTE tidak akan menjejaskan jadual sumber secara langsung.

Untuk mengatasi had ini, pendekatan berbeza diperlukan untuk mengemas kini rekod berdasarkan CTE. Pendekatan yang cekap ialah mencipta subkueri dalam CTE untuk mengira nilai yang diperlukan. Subquery ini kemudiannya boleh digunakan dalam pernyataan KEMASKINI untuk menggunakan nilai yang dikira pada jadual sasaran.

Pertimbangkan contoh berikut di mana anda ingin mengemas kini lajur PEDI_InvoiceDetail dalam jadual DocTotal berdasarkan nilai yang dikira dalam CTE:

<code class="language-sql">;WITH CTE_DocTotal AS
(
  SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal
  FROM PEDI_InvoiceDetail
  GROUP BY InvoiceNumber
)</code>
Salin selepas log masuk

CTE ini mengira InvoiceNumber untuk setiap DocTotal dan menyimpan hasilnya dalam koleksi sementara. Untuk mengemas kini jadual PEDI_InvoiceDetail dengan nilai ini, anda boleh menggunakan subkueri dalam CTE:

<code class="language-sql">;WITH T AS
(
  SELECT InvoiceNumber,
          SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
  FROM PEDI_InvoiceDetail
)
UPDATE T
SET DocTotal = NewDocTotal</code>
Salin selepas log masuk

Dalam subkueri ini, fungsi OVER dengan klausa SUM() mengira InvoiceNumber baharu untuk setiap partition (kumpulan) yang ditakrifkan oleh DocTotal. Subkueri ini kemudiannya dialiaskan kepada T dan digunakan dalam pernyataan KEMASKINI untuk mengemas kini lajur DocTotal dengan nilai yang dikira.

Dengan pendekatan ini, anda boleh mengemas kini rekod dengan berkesan dalam jadual PEDI_InvoiceDetail berdasarkan nilai yang dikira dalam CTE, memastikan perubahan itu berterusan dalam jadual sumber.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Rekod Jadual Menggunakan Nilai Dikira dalam Ungkapan Jadual Biasa (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