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 à jour plusieurs champs à partir d'une autre table


Sujet :

Langage SQL

  1. #1
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut Mettre à jour plusieurs champs à partir d'une autre table
    Je sais que L'insertion d'une table dans une autre est un sujet rebattu, et j'ai trouvé ceci dans un ancien thread :

    SQLpro a écrit:
    A la norme SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE TableA
    SET    C4 = (SELECT B.C4
                 FROM   TableA A
                        INNER JOIN TableB B
                              ON A.C1 = B.C1
                                 AND A.C2 = B.C2
                                 AND A.C3 = B.C3)
    Mais que dois-je faire si j'ai plusieurs champs à mettre à jour ?

    c'est-à dire pour que :
    C4 prenne la valeur B.C4,
    C5 la valeur B.C5,
    ...


    J'utilise Interbase 6

    Merci d'avance

    Roland
    Roland

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    A tester :
    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
     
    UPDATE TableA 
    SET    C4 = (SELECT B.C4 
                 FROM   TableA A 
                        INNER JOIN TableB B 
                              ON A.C1 = B.C1 
                                 AND A.C2 = B.C2 
                                 AND A.C3 = B.C3) ,
     
           C5 = (SELECT B.C5 
                 FROM   TableA A 
                        INNER JOIN TableB B 
                              ON A.C1 = B.C1 
                                 AND A.C2 = B.C2 
                                 AND A.C3 = B.C3) ,
           C6 = (SELECT B.C6
                 FROM   TableA A 
                        INNER JOIN TableB B 
                              ON A.C1 = B.C1 
                                 AND A.C2 = B.C2 
                                 AND A.C3 = B.C3)

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Merci de l'idée. J'y avais un peu pensé, mais je rêvais de qqch de plus simple.
    Ceci dit, j'avais cru "sur parole" l'exemple donné pour un seul champ, mais vérification faite, Interbase me renvoie l'erreur "Multiple rows in singleton select", alors que le champ de jointure constitue bien une clé unique Les méthodes indiquées ailleurs avec UPDATE... SET ... FROM ne marchent pas non plus "Token unknown FROM"
    J'ai peur que ça ne soit lié à Interbase, je vais aller faire un tour de ce côté.
    Merci tout de même

    Roland
    Roland

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    J'ai trouvé la solution (sur le forum Interbase). la syntaxe qui marche pour un champ est (en prenant le cas d'un champ de jointure unique) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TableA A
    SET    C2 = (SELECT B.C2
                 FROM TableB B
                 where  B.C1 = A.C1)
    (un WHERE au lieu d'un JOIN !)

    et pour plusieurs champs, l'idée de pipopolo était le bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE TableA A
    SET    C2 = (SELECT B.C2
                 FROM TableB B
                 where  B.C1 = A.C1),
             C3 = (SELECT B.C3
                 FROM TableB B
                 where  B.C1 = A.C1)
    sauf à utiliser une procédure stockée pour limiter les SELECT

    Merci pour votre aide !

    Roland
    Roland

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre à jour un champ à partir d'une autre table
    Par leuzar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2014, 09h53
  2. mettre à jour un champs à partir d'une requête "count"
    Par ninikosim dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 10/04/2011, 16h32
  3. Réponses: 9
    Dernier message: 23/11/2010, 10h10
  4. [AC-2000] Mettre à jour un champs à partir d'un autre
    Par falco- dans le forum IHM
    Réponses: 2
    Dernier message: 02/06/2009, 09h54
  5. [Toutes versions] Mettre à jour un champ à partir d'une variable
    Par familledacp dans le forum VBA Access
    Réponses: 6
    Dernier message: 25/04/2009, 20h43

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