Sql mettre à jour d'une table à partir d'une

hammag -  
DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   -
Bounjour tout le monde,
Quelqu'un pourrait-il m'aider pour développer la requête suivante :
J'ai deux tables : tab1 et tab2 qui ont la même structure (clés et champs)
Tab1(clé1,clé2, champ1, champ2 ...)
Tab2(clé1,clé2, champ1, champ2 ...)
Je cherche à mettre à jour des champs de tab2 à partir de tab1, le but de la requête est :
Si une ligne dans la table tab1 existe dans la table tab2 alors
Mettre à jour trois champs de la table tab2 avec les valeurs de ces mêmes champs à partir de tab1.
J'ai essayé cette requête :
  UPDATE tab2 B, tab1 A  
  SET   B.champ1 = A.champ1, 
  B.champ1 = A.champ1, 
  B.champ1 = A.champ1,  
WHERE   
   AND A.cle1 = B.cle1 
   AND A.cle2 = B.cle2 
   AND (A.cle1 ,A.cle2) IN ( SELECT B.cle1 ,B.cle2 
   FROM tab2 B 
   
   ) 


je ne suis pas sûr si la requête est correcte

merci d'avance

4 réponses

  1. rescue Messages postés 1047 Statut Contributeur 136
     
    Bonjour,

    J'aimerai savoir la base de données que tu utilises pour vouloir faire cette manipulation.
    Merci

    @+
    0
  2. jee pee Messages postés 31888 Date d'inscription   Statut Modérateur Dernière intervention   9 981
     
    Salut,

    Sous Oracle ce serait du style :

    UPDATE tab2 B   
    SET (champ1, champ2, ... ) =    
    (SELECT champ1, champ2, ...   
       FROM tab1 A   
       WHERE A.cle1 = B.cle1 and A.cle2 = B.cle2 )   
    WHERE EXISTS (SELECT * FROM tab1 C   
                             WHERE C.cle1 = B.cle1 and C.cle2 = B.cle2 ) ; 


    cdlt

    Un étranger, c'est un ami qu'on n'a pas encore rencontré.
    0
  3. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
     
    Bonjour HAMMAG,

    Essaie de voir aussi cette méthode
    SQL> MERGE INTO TAB2 A
    USING (SELECT CLE1, CLE2,CHAMP1 FROM TAB1) B
    ON (A.CLE1 = B.CLE1 AND A.CLE2=B.CLE2)
    WHEN MATCHED THEN UPDATE SET A.CHAMP1 = B.CHAMP1 ;


    http://www.dba-ora.fr/article-update-tables-merge-into-60484725.html
    0
    1. jee pee Messages postés 31888 Date d'inscription   Statut Modérateur Dernière intervention   9 981
       
      Bonjour,

      Intéressant cette commande, il y a longtemps que je ne fais plus de développement et je ne la connaissais pas.

      Peut-on combiner sur la même commande when match et when not match ?

      MERGE INTO TAB2 A
      USING (SELECT CLE1, CLE2,CHAMP1 FROM TAB1) B
      ON (A.CLE1 = B.CLE1 AND A.CLE2=B.CLE2)
      WHEN MATCHED THEN UPDATE SET A.CHAMP1 = B.CHAMP1 
      WHEN NOT MATCHED THEN INSERT CHAMP1 ...
      0
    2. DROE Messages postés 148 Date d'inscription   Statut Membre Dernière intervention   48
       
      Bonjour Jee pee,

      Oui tout à fait...
      ou alors WHEN NOT MATCHED THEN DELETE
      0