Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh mengemas kini entri MySQL dengan nilai baharu dengan cekap menggunakan pernyataan CASE?

Bagaimanakah saya boleh mengemas kini entri MySQL dengan nilai baharu dengan cekap menggunakan pernyataan CASE?

Barbara Streisand
Barbara Streisandasal
2024-11-11 07:55:03564semak imbas

How can I efficiently update MySQL entries with new values using the CASE statement?

Mengemaskini Entri MySQL Menggunakan CASE untuk Nilai Baharu

Artikel ini menangani cabaran mengemas kini secara besar-besaran harga penyenaraian berdasarkan ID dalam pangkalan data MySQL . Isu biasa yang dihadapi semasa mencuba ini ialah menggunakan pernyataan CASE, yang, apabila digunakan secara tidak betul, boleh membawa kepada hasil yang tidak dijangka.

Pertanyaan yang diberikan dalam soalan mengandungi kecacatan asas. Ia menggunakan penyata CASE untuk menetapkan lajur Harga, tetapi ia tidak menyatakan secara eksplisit nilai untuk rekod dengan ID yang tidak disertakan dalam klausa WHEN. Akibatnya, rekod tersebut akan dikemas kini dengan nilai NULL.

Untuk menyelesaikan masalah ini, struktur pertanyaan yang betul harus menyerupai yang berikut:

UPDATE  ae44
SET     price =
        CASE
        WHEN ID = 'AT259793380' THEN
                '500'
        WHEN ID = 'AT271729590' THEN
                '600'
        WHEN ID = 'AT275981020' THEN
                '700'
        END

Walau bagaimanapun, pertanyaan ini masih mempunyai kelemahan: ia akan kemas kini rekod dengan ID yang tidak disenaraikan dalam klausa WHEN dengan nilai NULL. Untuk mengehadkan kemas kini kepada hanya ID yang ditentukan, pendekatan yang lebih selektif diperlukan:

UPDATE  ae44
JOIN    (
        SELECT  'AT259793380' AS oldval, '500' AS newval
        UNION ALL
        SELECT  'AT271729590' AS oldval, '600' AS newval
        UNION ALL
        SELECT  'AT275981020' AS oldval, '700' AS newval
        ) q
ON      ae44.id = q.oldval
SET     price = q.newval

Pertanyaan ini menggunakan subkueri untuk mencipta jadual sementara dengan nilai lama dan baharu yang ditentukan. Ia kemudian menggunakan JOIN untuk memadankan rekod dalam jadual ae44 dengan rekod dalam subquery berdasarkan ID. Hanya rekod dengan ID yang sepadan akan dikemas kini harganya kepada nilai baharu yang sepadan, menjadikan semua rekod lain tidak berubah.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengemas kini entri MySQL dengan nilai baharu dengan cekap menggunakan pernyataan CASE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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