Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle - perbarui bergabung - tabel tanpa kunci yang diawetkan

Anda harus dapat melakukan ini dengan subquery yang berkorelasi

UPDATE tbl1 t1
   SET t1.b = (SELECT c
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')
 WHERE t1.a = 'foo'
   AND EXISTS( SELECT 1
                 FROM tbl2 t2
                WHERE t1.id = t2.id
                  AND t1.a  = t2.a
                  AND t1.b  = t2.b
                  AND t2.d  = 'a')

Masalah dengan UPDATE yang Anda tulis adalah bahwa Oracle tidak dapat menjamin bahwa ada tepat 1 tbl2.c nilai yang sesuai dengan satu tbl1.b nilai. Jika ada beberapa baris di tbl2 untuk setiap baris tertentu di tbl1 , pembaruan yang berkorelasi akan memunculkan kesalahan yang menunjukkan bahwa subkueri satu baris mengembalikan beberapa baris. Dalam hal ini, Anda perlu menambahkan beberapa logika ke subquery untuk menentukan baris mana dari tbl2 untuk digunakan dalam kasus itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Program PL/SQL untuk Mencetak Detail Karyawan

  2. Bagaimana menjalankan prosedur dengan prosedur DBMS_SCHEDULER.CREATE_JOB

  3. Cara Mempercantik Hasil Kueri Berformat JSON di SQLcl (Oracle)

  4. PL/SQL - Gunakan Variabel Daftar di Mana Dalam Klausa

  5. Apa perbedaan antara fungsi RANK() dan DENSE_RANK() di Oracle?