Menyelesaikan Masalah Pertanyaan Kemas Kini Tidak Tentu dengan Sertai dalam Oracle
Apabila melaksanakan pertanyaan KEMASKINI berikut:
UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL);
pengguna mungkin menghadapi ralat pelaksanaan yang tidak pasti. Artikel ini menyelidiki isu ini dan menyediakan penyelesaian.
Masalah: Hasil Subkueri Bukan Unik
Punca ralat terletak pada subkueri dalam KEMASKINI kenyataan. Melainkan subquery mengembalikan satu baris untuk setiap baris dalam jadual1, operasi kemas kini akan gagal. SERTAI KIRI dalam subkueri membenarkan berbilang baris yang sepadan, yang berpotensi membawa kepada kemas kini bukan penentu.
Penyelesaian: Memastikan Subkueri Satu Baris Kembali
Untuk menyelesaikan masalah isu, syarat diperlukan untuk mengaitkan baris dalam jadual1 dengan baris dalam subkueri, memastikan subkueri mengembalikan satu baris. Ini boleh dicapai dengan menambah syarat cantum yang sepadan dengan baris dengan kunci unik:
UPDATE table1 t1 SET (t1.col,t1.Output) = ( SELECT t2.col, t3.Output + t2.col FROM tabl2 t3 LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key WHERE t2.col is not NULL AND t1.some_key = t2.some_key);
Skop Penanganan Kemas Kini
Pertimbangan lain ialah hakikat bahawa Kenyataan UPDATE boleh menjejaskan semua baris dalam jadual1. Adalah penting untuk menilai sama ada ini adalah tingkah laku yang dimaksudkan atau jika kemas kini yang lebih terpilih diperlukan. Dengan memasukkan syarat WHERE tambahan dalam pernyataan UPDATE, pengguna boleh mengehadkan skop kemas kini kepada baris tertentu, seperti yang diperlukan.
Atas ialah kandungan terperinci Mengapa Oracle Saya MENGEMASKINI Pertanyaan dengan JOIN Hang, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!