IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Mettre a jour une table a partir d'une autre table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 148
    Par défaut Mettre a jour une table a partir d'une autre table
    j'ai deux tables T1 et T2
    elles ont la même structure sauf que les enregistrements qui se trouvent dans T2 sont plus récentes que celle dans T1 ce que je cherche est le suivant :
    mettre a jours les enregistrements du T1 par ceux qui se trouve dans T2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Table T1:
    --------------------------------------
    ID     | nom       | score
    --------------------------------------
    1      | eric        | 1
    2      | thomas   | 78 
    3      | michel     | 35
    4      | benoit     | 27
    5      | lieven      | 12
    6      | galik        | 54
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    table T2 :
    --------------------------------------
    ID     | nom       | score
    --------------------------------------
    1      | eric        | 154
    2      | stevan    | 78 
    3      | bernard   | 35
    4      | benoit     | 55
    ici dans cet exemple :les score de eric et benoit doivent changer et on ajoute les deux nouveaux
    comment faire ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    La mise à jour doit se faire en deux étapes : insertion puis mise à jour (ou l'inverse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    INSERT INTO t2
        (   id
        ,   nom
        ,   score
        )
    SELECT  id
        ,   nom
        ,   score
    FROM    t1
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    t2
                WHERE   t2.id = t1.id
            )
    ;
    UPDATE  t2
    SET    score =  (   SELECT  score
                        FROM    t1
                        WHERE   t1.id = t2.id
                            AND t2.score <> t1.score 
                    )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    À noter que l'opérateur MERGE, si votre SGBD l'implémente (c'est le cas à partir d'Oracle 9i et SQL Server 2008, probablement d'autres), permet de faire ces deux opérations en une seule instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MERGE INTO t1
    USING t2
    ON (t2.id = t1.id)
    WHEN MATCHED THEN
    UPDATE t1.score = t2.score
    WHEN NOT MATCHED THEN
    INSERT (t1.id, t1.nom, t1.score)
    VALUES (t2.id, t2.nom, t2.score);

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/10/2010, 11h46
  2. Réponses: 1
    Dernier message: 28/09/2010, 16h10
  3. Réponses: 2
    Dernier message: 05/03/2010, 14h15
  4. Mise a jour d'une table a partir d'une autre
    Par aliboubou dans le forum Access
    Réponses: 3
    Dernier message: 01/02/2007, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo