web-dev-qa-db-fra.com

Comment mettre à jour une table à partir d'une autre table

J'ai une table A a une colonne (id, field_1, field_2), et une autre table B a une colonne (id, field_2)

Maintenant, je veux fusionner la table B en A, cela signifie que je veux mettre à jour field_2 dans la table A à la valeur de la table B. Alors, comment implémenter cela? BTW j'utilise Oracle

Merci

29
zjffdu

Une approche alternative à la sous-requête associée (suggérée par Kerri) serait d'utiliser l'instruction MERGE, qui pourrait être plus efficace que la sous-sélection (qui ne peut être vérifiée qu'en regardant le plan d'exécution de les deux déclarations).

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

Pas exactement sûr de ce que vous recherchez sur celui-ci, mais cela devrait fonctionner de manière ponctuelle ou continue via un travail planifié:

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

Maintenant, chaque fois que ce qui précède est exécuté, il le fera sur toutes les lignes du tableau. Si c'est quelque chose que vous devez faire tout le temps, je suggérerais autre chose, mais pour des tables uniques ou très petites, cela devrait être suffisant.

15
Kerri Shotts

J'ai fait cela avec succès en utilisant une table dans user1 à partir d'une autre table dans 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

Vous pouvez créer un déclencheur sur tableB qui met à jour tableA à chaque mise à jour de field_2 sur tableB. Vérifiez ici pour plus d'informations sur la création de déclencheurs - http://download.Oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#BABCIBBJ

1
SqlSandwiches