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

Fermé
hammag - Modifié par hammag le 14/05/2011 à 16:35
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 - 16 mai 2011 à 13:06
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
A voir également:

4 réponses

rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
14 mai 2011 à 19:11
Bonjour,

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

@+
0
jee pee Messages postés 41217 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 mai 2025 9 625
Modifié par jee pee le 14/05/2011 à 20:37
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
c'est une base oracle 9i
0
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
15 mai 2011 à 01:22
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
jee pee Messages postés 41217 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 mai 2025 9 625
15 mai 2011 à 13:14
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
DROE Messages postés 148 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 26 juillet 2012 48
16 mai 2011 à 13:06
Bonjour Jee pee,

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