Kemas kini dengan Join Query dalam Oracle: Menyelesaikan Masalah Gelung Infinite
Pertanyaan Oracle UPDATE yang disediakan dilaksanakan selama-lamanya, menimbulkan persoalan tentang perkara yang boleh menyebabkan isu ini. Pertanyaan cuba mengemas kini lajur dalam jadual1 menggunakan subkueri berkorelasi yang menyertai dua jadual lain.
Punca punca gelung tak terhingga mungkin disebabkan ketiadaan syarat dalam subkueri yang akan memastikan ia mengembalikan satu baris untuk setiap baris dalam jadual1. Tanpa syarat sedemikian, subkueri mungkin mengembalikan berbilang baris, yang akan mengakibatkan pelanggaran terhadap keperluan pernyataan KEMASKINI untuk operasi kemas kini satu baris.
Untuk menyelesaikan isu ini, adalah perlu untuk menambah syarat pada subquery yang mengaitkan baris dalam jadual1 dengan baris dalam subquery. Ini biasanya melibatkan pemadanan kunci utama atau unik antara jadual menggunakan klausa DAN. Contohnya:
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 contoh ini, syarat DAN t1.some_key = t2.some_key memastikan bahawa subquery akan kembali paling banyak satu baris untuk setiap baris dalam jadual1, dengan itu menghalang gelung tak terhingga.
Satu lagi pertimbangan penting ialah sama ada pernyataan KEMASKINI bertujuan untuk mengemas kini semua baris dalam jadual1 atau hanya subset daripadanya. Pertanyaan asal tidak mengandungi mana-mana klausa WHERE, menunjukkan bahawa ia akan mengemas kini semua baris, yang mungkin bukan tingkah laku yang diingini. Jika hanya subset baris tertentu yang perlu dikemas kini, klausa WHERE harus ditambah untuk menapis baris yang memenuhi kriteria kemas kini.
Atas ialah kandungan terperinci Mengapa Oracle Saya MENGEMASKINI Pertanyaan dengan Join Menyebabkan Gelung Infinite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!