Bir tabloyu başka bir tablodan güncelleme


28

Bir A tablosunun sütununda (id, field_1, field_2) ve diğer bir B tablosunda sütun (id, field_2) var

Şimdi, B tablosunu A ile birleştirmek istiyorum, bu demek oluyor ki, Tablo_'daki alan_2'yi tablo B'nin değerine güncellemek istiyorum. Btw ben kehanet kullanıyorum

Teşekkürler


Her iki tabloda da aynı sayıda kayıt var mı?
ujjwalesri

Yanıtlar:


29

Eş bağlantılı alt sorguya (Kerri tarafından önerilen) alternatif bir yaklaşım, alt seçiciden daha etkili olabilecek MERGE ifadesini kullanmak olacaktır (sadece her iki ifadenin uygulama planına bakarak doğrulanabilir).

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
İfadeye getirilen tek kısıtlama MERGE, birleştirildiği sütunu güncelleyemezsiniz, yani ONmaddede kullanılan sütunu güncelleyemezsiniz .
Lalit Kumar B

Bu ile erroring önce belki 45 dakika koştum alt sorgu yöntemini deneyen vs 2.5 milyon satır, benim için çalıştı güncellenmişORA-01555: snapshot too old
Helmy

15

Bu işte neyin peşinde olduğunuzdan tam olarak emin değilsiniz, ancak bu bir kereye mahsus olarak çalışmalı veya zamanlanmış bir işle sürekli çalışmalıdır:

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

Şimdi, yukarıdakilerin her yürütülmesi, tablodaki tüm satırlara yapacaktır. Bu, her zaman yapmanız gereken bir şeyse, başka bir şey öneririm, ancak bir kereye mahsus veya çok küçük masalar için yeterli olmalıdır.


2

Bunu user1'deki bir tabloyu user2'deki başka bir tablodan başarıyla kullanarak yaptım:

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.