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.