Update selectif entre 2 tables

Fermé
maestro1303 Messages postés 37 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 7 décembre 2019 - 29 janv. 2014 à 15:31
Killburns911 Messages postés 293 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 25 avril 2023 - 31 janv. 2014 à 08:49
Bonjour à tous,

J'ai un problème que je voudrais vous exposer car j'ai du mal à lui trouver une solution.
Voilà:

J'ai deux tables T1 et T2 ayant -à peu près-la même structure

T1
clé,C1,C2,C3

T2
clé,C1,C2,C3

les champs c1,c2 et C3 ont par défaut la valeur '555', mais peuvent contenir d'autres valeurs < 1

Pour parler des champs c1,c2 et C3 j'utilise Ci

Je dois donc parcourir T2 et T1
Si je trouve t1.cle=t2.cle alors je mets les données à jour dans t1 de la manière suivante:
si (T2.Ci<> '555' et T1.Ci='555' ) alors (update t1 set T1.Ci= T2.Ci)
Si (si (T2.Ci<> '555' et T1.Ci<> '555') et (T2.Ci<T1.Ci)) alors (update t1 set T1.Ci= T2.Ci)



Enfin je supprime dans T2 l'enregistrement correspondant à t2.cle avec lequel on a fait les updates précédents dans T1
.

Ma question : quelle est la requête ou les requêtes SQL pour effectuer cette tâche?

Merci infiniment



--
A voir également:

6 réponses

Killburns911 Messages postés 293 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 25 avril 2023 15
29 janv. 2014 à 15:48
As tu penser a utiliser les Déclencheurs ?

ou des triggers ( version anglaise )???

en gros tu as quelques trucs a savoir

Instead of [Insert , Update , Delete]<--- Au lieu de

Faire tes test

Exécuter le résultat de tes tests

et a chaque fois que tu effectueras une opération de ce type, cela le feras automatiquement

exemple

Instead Of Insert

if A.T1 = A.T2
Insert into (....)
Values (....)

a chaque fois que tu feras une requête de type Insert dans ta base , vis a vis des tables concernées , la requête passeras d'abord par le declancheur avant d'être traité

Si je n'ai pas répondu a ta question ou que tu souhaite plus d'information , n'hésite pas :D
1
maestro1303 Messages postés 37 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 7 décembre 2019 1
29 janv. 2014 à 16:18
Merci beaucoup de cette réponse,
Tout d'abord je serai vraiment ravi d'apprendre les triggers à travers cet exemple, mais je ne connais rien des triggers, je suis obligé de solliciter ton aide et éventuellement celle des membres de ce forum.

Merci d'avance

--
0
Killburns911 Messages postés 293 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 25 avril 2023 15
29 janv. 2014 à 16:29
Un Trigger , qu'est ce que c'est ?

c'est une requete ( ou suite de requête ) qui vas se declancher ( trigger ) en anglais , au moment ou , selon ce que je t'ai dis plus haut , tu vas effectuer une action sur les tables concernée

si tu as une table t1 , une autre table t2

T1(idnom
T2(id#nom

quand tu vas écrire une requête , tu vas l'écrire comme ceci

Select ....
From T1 , T2
Where T1.Nom=T2.Nom

Dans un Trigger , c'est la meme chose :D sauf que cela se fais en " cascade "


CREATE OR ALTER TRIGGER // Crée ou Modifier le Trigger
[BEFORE] Ou [INSTEAD OF] INSERT OR UPDATE ON // Avant de , ou Au lieu de
[

Si A=A

]
BEGIN //Alors

[

Endroit ou tu exécute une requête //Exécution de la requête

]


END;


[

Etsi A=B

]
BEGIN //Alors

[

Endroit ou tu exécute une requête

]
0
maestro1303 Messages postés 37 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 7 décembre 2019 1
29 janv. 2014 à 23:31
Bonjour,
Comme j'ai dit je connais rien aux triggers, mais ça doit ressembler à ça (à un trigger près !)

create trigger t1t2
if t1.id=t2.id then
if t1.c1='555' and t2.c1<>'555'
update t1 set c1= t2.c1
endif
if t1.c2='555' and t2.c2<>'555'
update t1 set c2= t2.c2
endif
if t1.c3='555' and t2.c3<>'555'
update t1 set c3= t2.c3
endif


if t2.c1< t1.c1
update t1 set c1= t2.c1
endif
if t2.c2< t1.c2
update t1 set c2= t2.c2
endif

if t2.c3< t1.c3
update t1 set c3= t2.c3
endif
Endif

Merci trigger(mais comme je ne connais pas la syntaxe...

Merci infiniment de votre aide à l'avance.

--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maestro1303 Messages postés 37 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 7 décembre 2019 1
30 janv. 2014 à 00:47
Bonjour,
Je demande pardon car je n'ai pas pu modifier mon message prédédent

Comme j'ai dit je connais rien aux triggers, mais ça doit ressembler à ça (à un trigger près !)

create trigger t1t2
Begin
[
Begin
[
if t1.id=t2.id then
if t1.c1='555' and t2.c1<>'555'
update t1 set c1= t2.c1
delete from t2 where t2.id=ID
endif
if t1.c2='555' and t2.c2<>'555'
update t1 set c2= t2.c2
delete from t2 where t2.id=ID
endif
if t1.c3='555' and t2.c3<>'555'
update t1 set c3= t2.c3
delete from t2 where t2.id=ID
endif

]

END;

Begin
[
if t2.c1< t1.c1
update t1 set c1= t2.c1
delete from t2 where t2.id=ID
endif
if t2.c2< t1.c2
update t1 set c2= t2.c2
delete from t2 where t2.id=ID
endif

if t2.c3< t1.c3
update t1 set c3= t2.c3
delete from t2 where t2.id=ID
endif
Endif

]

END;

]

END;

Je vous prie de bien vouloir guider mes pas afin de pouvoir y arriver
Merci infiniment de votre aide à l'avance.
0
Killburns911 Messages postés 293 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 25 avril 2023 15
30 janv. 2014 à 13:15
Ouai ouai , c'est l'idée , apres tu n'a plus qu'a appliqué ca a ta Base De Donnée et en avant ^^
0
maestro1303 Messages postés 37 Date d'inscription mardi 18 juillet 2006 Statut Membre Dernière intervention 7 décembre 2019 1
30 janv. 2014 à 19:42
Bonjour Killburns911 ,

Devant mon ignorance des triggers et de leur syntaxe, je suis bloqué/perdu.

Pourrais tu donner un coup de pouce STP.

Merci d'avance.

--
0
Killburns911 Messages postés 293 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 25 avril 2023 15
31 janv. 2014 à 08:49
Bien sur , envoie moi les requêtes que tu veux inscrire dans ta base de données , et je le ferais :D sans aucun souci :D

En message privé histoire de pas gener les utilisateur , ou alors avec le site
https://www.cjoint.com/
0