Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengelakkan Gelung Infinite Apabila Menggunakan Subkueri Berkorelasi untuk Kenyataan KEMASKINI dalam Oracle?

Bagaimana untuk Mengelakkan Gelung Infinite Apabila Menggunakan Subkueri Berkorelasi untuk Kenyataan KEMASKINI dalam Oracle?

Patricia Arquette
Patricia Arquetteasal
2024-12-29 02:24:11579semak imbas

How to Avoid Infinite Loops When Using Correlated Subqueries for UPDATE Statements in 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!

Kenyataan:
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