Cara memperbarui tabel dari tabel lain


28

Saya punya satu tabel A memiliki kolom (id, field_1, field_2), dan tabel lain B memiliki kolom (id, field_2)

Sekarang saya ingin menggabungkan tabel B ke A, itu berarti saya ingin memperbarui field_2 dalam tabel A ke nilai tabel B. Jadi bagaimana menerapkannya? BTW saya menggunakan oracle

Terima kasih


Apakah kedua tabel berisi jumlah rekaman yang sama?
ujjwalesri

Jawaban:


29

Pendekatan alternatif untuk subquery yang saling terkait (disarankan oleh Kerri) adalah dengan menggunakan pernyataan MERGE, yang mungkin lebih efisien daripada subselect (yang hanya dapat diverifikasi dengan melihat rencana pelaksanaan kedua pernyataan).

MERGE INTO table_b 
USING 
(
  SELECT id,
         field_2
  FROM table_a
) ta ON (ta.id = table_b.id)
WHEN MATCHED THEN UPDATE 
    SET table_b.field_2 = ta.field_2

2
Satu-satunya batasan pada MERGEpernyataan adalah bahwa Anda tidak dapat memperbarui kolom tempat ia bergabung, yaitu Anda tidak dapat memperbarui kolom yang digunakan dalam ONklausa.
Lalit Kumar B

Ini bekerja untuk saya, memperbarui 2,5 juta baris vs. mencoba metode sub-kueri yang berjalan selama mungkin 45 menit sebelum kesalahan denganORA-01555: snapshot too old
helmy

15

Tidak persis yakin apa yang Anda harapkan satu ini, tapi ini harus bekerja sebagai satu-off, atau terus-menerus melalui pekerjaan yang dijadwalkan:

UPDATE table_a a
   SET field_2 = ( SELECT field_2
                     FROM table_b b
                    WHERE b.id = a.id )
;

Sekarang, setiap kali di atas dieksekusi, itu akan melakukannya di semua baris dalam tabel. Jika ini adalah sesuatu yang perlu Anda lakukan sepanjang waktu, saya akan menyarankan sesuatu yang lain, tetapi untuk meja satu kali atau sangat kecil itu sudah cukup.


2

Saya telah melakukan ini dengan sukses menggunakan satu tabel di user1 dari tabel lain di user2:

update user1.table1 a
set a.field1 = (
  select b.field1
  from user2.table2 b
  where a.field1=b.field1
)
where <condition for update user1.table1>

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.