Rumah > Artikel > pangkalan data > Bagaimanakah saya boleh mengemas kini entri MySQL dengan nilai baharu dengan cekap menggunakan pernyataan CASE?
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!