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

Requêtes MySQL Discussion :

Mise à jour d'une colonne de table avec une autre.


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de Amélie Ladoque
    Inscrit en
    novembre 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : novembre 2004
    Messages : 210
    Points : 241
    Points
    241
    Par défaut Mise à jour d'une colonne de table avec une autre.
    Bonjour à tous,

    Je dois mettre à jour la colonne Val_A de la table A avec la donnée correspondante de la table B.
    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
    Table A
    ------------------------------
    | id_A | Nom_A     | Val_A   |
    ------------------------------
    | 0    | Toto      |    0    |
    | 1    | Tata      |    0    |
    | 2    | Titi      |    0    |
    | 3    | Tutu      |    0    |
    | 4    | Tita      |    0    |
    | 5    | Titu      |    0    |
    ------------------------------
     
    Table B
    --------------------------
    | id_B | Val_B   | id_A  |
    --------------------------
    | 0    | 50.00   | 0     |
    | 1    | 25.00   | 1     |
    | 2    | 60.00   | 3     |
    | 3    | 10.00   | 4     |
    | 4    | 15.00   | 5     |
    --------------------------
    Merci pour votre aide sur cet UPDATE que je souhaite faire en une fois.

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

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

    Informations forums :
    Inscription : mai 2002
    Messages : 8 973
    Points : 30 129
    Points
    30 129
    Par défaut
    Bonjour,

    Quelle(s) requête(s) as-tu déjà essayée(s) ?
    Quel problème rencontres-tu ?
    - Un résultat erroné ? Lequel ?
    - Un message d'erreur ? Lequel ?
    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
    Membre actif Avatar de Amélie Ladoque
    Inscrit en
    novembre 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : novembre 2004
    Messages : 210
    Points : 241
    Points
    241
    Par défaut
    Je n'arrive pas à retourner un seul enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update TableA set Val_A = (select Val_B from TableB, TableA where TableA.Id_A = TableB.Id_B)

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 8 973
    Points : 30 129
    Points
    30 129
    Par défaut
    Cette requête s'exécute sans retourner de message d'erreur ?
    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.

  5. #5
    Membre actif Avatar de Amélie Ladoque
    Inscrit en
    novembre 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : novembre 2004
    Messages : 210
    Points : 241
    Points
    241
    Par défaut
    L'erreur est celle que je viens de vous donner :
    retourner un seul enregistrement
    Le SELECT renvoie toute la table B

  6. #6
    Membre éprouvé
    Inscrit en
    mai 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 256
    Points : 1 085
    Points
    1 085
    Par défaut
    Citation Envoyé par Amélie Ladoque Voir le message
    Je n'arrive pas à retourner un seul enregistrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update TableA set Val_A = (select Val_B from TableB, TableA where TableA.Id_A = TableB.Id_B)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update TableA set Val_A = (select Val_B from TableB INNER JOIN TableA ON TableA.Id_A = TableB.Id_B)
    D'ailleurs dans ta condition tu mets TableB.Id_B c'est pas TableB.Id_A que tu voudrais plutôt ?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 913
    Points : 11 913
    Points
    11 913
    Par défaut
    Bonjour,
    Le message indique que la sous requête ne doit renvoyer qu'une seul ligne.
    Or ici rien ne permet de l'affirmer, car il n'y a pas de lien entre la requête principale (l'UPDATE) et la sous requête.

    Ici il faut utiliser une jointure dans l'UPDATE, comme ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update TableA
    inner join TableB on TableA.id_a = TableB.id_b
    set TableA.val_a = TableB.val_b

    Plus d'infos .

    Tatayo.

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    mai 2002
    Messages
    8 973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 8 973
    Points : 30 129
    Points
    30 129
    Par défaut
    Il faut lier les lignes à mettre à jour avec la donnée correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE  TableA
    SET     Val_A = 
            (   SELECT  Val_B
                FROM    TableB 
                WHERE   TableA.Id_A = TableB.Id_A
            )
    ;
    Cette requête ne fonctionnera bien sûr qu'à la condition qu'il n'y ait qu'une seule correspondance dans TableB pour chaque ligne de TableA.

    De plus, s'il n'y a pas de correspondance, la colonne TableA.Val_A sera mise à NULL.
    Pour éviter cela on peut limiter les mises à jour aux lignes ayant une correspondance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE  TableA
    SET     Val_A = 
            (   SELECT  Val_B
                FROM    TableB 
                WHERE   TableA.Id_A = TableB.Id_A
            )
    WHERE   EXISTS
            (   SELECT  Val_B
                FROM    TableB 
                WHERE   TableA.Id_A = TableB.Id_A
            )
    ;
    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.

  9. #9
    Membre actif Avatar de Amélie Ladoque
    Inscrit en
    novembre 2004
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : novembre 2004
    Messages : 210
    Points : 241
    Points
    241
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 17/06/2021, 09h10
  2. ProgressBar mise à jour depuis une autre classe
    Par poussinvert dans le forum Android
    Réponses: 23
    Dernier message: 23/05/2012, 19h20
  3. Réponses: 1
    Dernier message: 17/06/2010, 13h00
  4. [AC-2003] Afficher le contenu d'une listBox sur evenement après mise à jour d'une autre.
    Par moilou2 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 17/07/2009, 11h47
  5. Réponses: 2
    Dernier message: 24/03/2009, 14h14

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