Rumah > pangkalan data > tutorial mysql > Mengapa Oracle Saya MENGEMASKINI Pertanyaan dengan Join Menyebabkan Gelung Infinite?

Mengapa Oracle Saya MENGEMASKINI Pertanyaan dengan Join Menyebabkan Gelung Infinite?

Linda Hamilton
Lepaskan: 2024-12-24 00:04:15
asal
334 orang telah melayarinya

Why Does My Oracle UPDATE Query with a Join Cause an Infinite Loop?

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan