Update selectif entre 2 tables
maestro1303
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
Killburns911 Messages postés 293 Date d'inscription Statut Membre Dernière intervention -
Killburns911 Messages postés 293 Date d'inscription Statut Membre Dernière intervention -
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
--
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:
- Update selectif entre 2 tables
- Supercopier 2 - Télécharger - Gestion de fichiers
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Tables des matières word - Guide
6 réponses
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
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
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
--
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
--
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
]
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
]
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.
--
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.
--
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
--
Devant mon ignorance des triggers et de leur syntaxe, je suis bloqué/perdu.
Pourrais tu donner un coup de pouce STP.
Merci d'avance.
--
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/
En message privé histoire de pas gener les utilisateur , ou alors avec le site
https://www.cjoint.com/