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

DB2 Discussion :

mettre à jour plusieurs enregistrements avec jointure


Sujet :

DB2

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Points : 79
    Points
    79
    Par défaut mettre à jour plusieurs enregistrements avec jointure
    Bonjour,

    Je cherche a mettre à jour la colonne d'une table pour des enregistrements spécifiques.
    ces enregistrement sont le résultat d'une sélection avec jointure sur trois tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mettre à jour Tab_1
    Set Zone_1 = 'ACT'
    pour 
    (select * from Tab_1, Tab_2, Tab_3
     where Tab_1.Zone_2 = Tab_2.Zone_2
        And Tab_1.Zone_2 = Tab_3.Zone_2)
    Sachant que la sous requête en rouge retourne plusieurs enregistrements.

    en résumant: je veut donner la valeur 'ACT' à la Zone_1 de la Tab_1 que pour les enregistrements sélectionnés par la sous requête en rouge.

    Est ce que quelqu'un peut m'aider, car ça fait trois jours que je galère

    Merci à vous par avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Update Tab_1
    SET Zone_1 = 'ACT'
    Where Exists ( SELECT 1 FROM Tab_1, Tab_2, Tab_3
                          WHERE Tab_1.Zone_2 = Tab_2.Zone_2
                          AND Tab_1.Zone_2 = Tab_3.Zone_2 )
    devrait faire l'affaire.

    J'aurais plutôt fait un JOIN entre les tables, mais bon !

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,


    Je penses qu'il faudrait quand même dégager Tab1 de la sous-requete de l'existe :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE Tab_1
    SET Zone_1 = 'ACT'
    WHERE EXISTS 
    ( SELECT 1 
    FROM Tab_2
    inner join tab_3 on Tab_3.Zone_2 = Tab_2.Zone_2
    WHERE Tab_1.Zone_2 = Tab_2.Zone_2)

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Update Tab_1
    SET Zone_1 = 'ACT'
    Where Exists ( SELECT 1 FROM Tab_1, Tab_2, Tab_3
                          WHERE Tab_1.Zone_2 = Tab_2.Zone_2
                          AND Tab_1.Zone_2 = Tab_3.Zone_2 )
    devrait faire l'affaire.

    J'aurais plutôt fait un JOIN entre les tables, mais bon !
    Merci pour ta réponse, mais j'ai déjà essayé cette solution, mais elle fait la mise à jour de tous les enregistrements de la table Tab_1, car avec le "WHERE EXISTS" la mise à jour se fait même si la sous requête retourne ne retourne qu'un seul enregistrement, et elle ne le fait pas si la sous requête ne retourne aucun enregistrement.

    dans mon cas la MàJ doit se faire sur 711 enregistrement alors que là elle me le fait sur 2079990 lignes mises à jour.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    c'est normal vous ne faites aucune restriction sur votre tab_1 updatée avec cette solution.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,


    Je penses qu'il faudrait quand même dégager Tab1 de la sous-requete de l'existe :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE Tab_1
    SET Zone_1 = 'ACT'
    WHERE EXISTS 
    ( SELECT 1 
    FROM Tab_2
    inner join tab_3 on Tab_3.Zone_2 = Tab_2.Zone_2
    WHERE Tab_1.Zone_2 = Tab_2.Zone_2)
    Tu as raison
    Merci beaucoup, elle marche magnifiquement bien Merci encore.

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Oui, c'est bien çà. J'ai oublié d'enlever Tab_1 de la sous-requête, sorry. Grrr

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

Discussions similaires

  1. [AC-2010] Mettre à jour des enregistrements avec des listbox
    Par jonsnow43 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/06/2014, 14h24
  2. Réponses: 2
    Dernier message: 23/11/2010, 14h08
  3. Mettre à jour plusieurs enregistrements d'une table
    Par eric41 dans le forum Langage
    Réponses: 2
    Dernier message: 26/11/2008, 16h33
  4. Mettre à jour plusieurs champs avec la même requête, est-ce possible ?
    Par marchand_de_sable dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/06/2008, 17h36
  5. mettre à jour plusieurs tables avec un formulaire
    Par kangourou_agile dans le forum Access
    Réponses: 6
    Dernier message: 07/08/2006, 15h33

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