Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Gelung Infinite Apabila Menggunakan Subkueri Berkorelasi untuk Kenyataan KEMASKINI dalam Oracle?
Kemas kini dengan Sertai Pertanyaan dalam Oracle: Mengendalikan Kemas Kini Berkorelasi
Dalam Oracle, melakukan pertanyaan kemas kini dengan subkueri berkorelasi boleh membawa kepada tingkah laku yang tidak dijangka atau ralat jika subkueri tidak mengembalikan satu baris. Pertimbangkan pertanyaan 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);
Isu:
Pertanyaan yang disediakan dilaksanakan selama-lamanya kerana subkueri mungkin mengembalikan berbilang baris untuk setiap baris dalam jadual1. Dalam senario ini, Oracle cuba mengemas kini setiap baris dalam jadual1 beberapa kali, menghasilkan gelung yang tidak berkesudahan.
Penyelesaian:
Untuk menyelesaikan isu ini, adalah perlu untuk pastikan subquery mengembalikan satu baris untuk setiap baris dalam jadual1 sedang dikemas kini. Satu pendekatan ialah menambah syarat yang mengaitkan baris dalam jadual1 dengan baris dalam subkueri:
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);
Dalam pertanyaan yang diubah suai ini, syarat tambahan, t1.some_key = t2.some_key, memastikan bahawa hanya baris yang sepadan sahaja disertakan dalam subkueri, menghasilkan satu baris untuk setiap baris table1.
Selain itu, ia adalah patut dipertimbangkan sama ada pertanyaan itu berhasrat untuk mengemas kini semua baris dalam jadual1 atau hanya subset daripadanya. Jika matlamatnya adalah untuk mengemas kini hanya baris tertentu berdasarkan hasil subkueri, kriteria penapisan tambahan boleh ditambahkan pada klausa KEMASKINI.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Gelung Infinite Apabila Menggunakan Subkueri Berkorelasi untuk Kenyataan KEMASKINI dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!