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>
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>
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!