Update selectif entre 2 tables

maestro1303 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
Killburns911 Messages postés 312 Statut Membre -
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



--

6 réponses

  1. Killburns911 Messages postés 312 Statut Membre 15
     
    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
  2. maestro1303 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
  3. Killburns911 Messages postés 312 Statut Membre 15
     
    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
  4. maestro1303 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. maestro1303 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. Killburns911 Messages postés 312 Statut Membre 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
  7. maestro1303 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. Killburns911 Messages postés 312 Statut Membre 15
       
      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