it-swarm.dev

Jak zaktualizować tabelę z innej tabeli

Mam jedną tabelę A ma kolumnę (id, field_1, field_2), a drugą tabelę B ma kolumnę (id, field_2)

Teraz chcę scalić tabelę B z A, co oznacza, że ​​chcę zaktualizować pole_2 w tabeli A do wartości z tabeli B. Więc jak to zaimplementować? BTW Używam Oracle

Dzięki

29
zjffdu

Alternatywnym podejściem do powiązanego podkwerendy (sugerowanego przez Kerri) byłoby użycie instrukcji MERGE, która mogłaby była bardziej wydajna niż podselekcja (którą można zweryfikować tylko patrząc na plan wykonania oba oświadczenia).

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
30

Nie dokładnie pewnie, o co ci chodzi w tym, ale powinno to działać jako jednorazowe lub ciągłe poprzez zaplanowane zadanie:

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

Teraz, za każdym razem, gdy powyższe zostanie wykonane, zrobi to we wszystkich wierszach w tabeli. Jeśli jest to coś, co musisz cały czas robić, proponuję coś innego, ale w przypadku jednorazowych lub bardzo małych stolików powinno wystarczyć.

15
Kerri Shotts

Zrobiłem to pomyślnie, używając jednej tabeli w user1 z innej tabeli w 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>
2
Siddik

Możesz utworzyć wyzwalacz w tableB, który aktualizuje tableA za każdym razem, gdy field_2 w tableB jest aktualizowany. Sprawdź tutaj, aby uzyskać więcej informacji na temat tworzenia wyzwalaczy - http://download.Oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ

1
SqlSandwiches