Update selectif entre 2 tables

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. 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. 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

      --
      1. 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

        ]
        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.

          --
          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.
            1. 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 ^^
          2. 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.

            --
            1. 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/