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. 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/
  2. 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 ^^
  3. 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. 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. 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. 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