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 et SQL. Discussion :

UPDATE après UN SELECT


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut UPDATE après UN SELECT
    Bonjour à tous

    j'ai un petit soucis pour effectuer une requête de mise à jour.

    j'ai effectué la requête de sélection suivante : Elle me permet de sélectionner les enregistrements de ma table Mouvement pour lesquelles il y a deux enregistrement dans la tabe liée ligne_mouvements et de vérifier que la différence entre les deux quantités (qte_mvt) de ces deux enregistrement soit égale = 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur], Mouvement.code_stat, Count(ligne_mouvements.type_mvt) AS CompteDetype_mvt, Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)) AS S
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur], Mouvement.code_stat
    HAVING (((Count(ligne_mouvements.type_mvt))=2) AND ((Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)))=0));
    Cette requête de sélection fonctionne très bien. Je voudrais à partir de cette sélection, mettre à jour le champ Mouvement.code_stat. Je suis passé par l'écran Access sur les requêtes. J'ai activé l'option Requête de mise à jour. Mais je n'arrive pas à faire cette à jour tout en gardant mes critères de sélection.
    Avec mes explications est-ce que quelqu'un peut me dire en SQL comment faire ?
    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut Tentative ....
    J'ai essayé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE Mouvement
    SET Mouvement.code_stat = "C"
    WHERE (SELECT  Mouvement.code_stat
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur], Mouvement.code_stat
    HAVING (((Count(ligne_mouvements.type_mvt))=2) AND ((Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)))=0)));
    j'ai eu un message "Cette sous requête peut retourner au plus un enregistrement. Je ne comprends pas

  3. #3
    Membre expérimenté
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    salut,
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE Mouvement
    SET Mouvement.code_stat = "C"
    WHERE Mouvement.code_stat in (SELECT  Mouvement.code_stat
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur], Mouvement.code_stat
    HAVING (((Count(ligne_mouvements.type_mvt))=2) AND ((Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)))=0)));
    La différence ligne 3 :WHERE Mouvement.code_stat in

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    merci pour ton aide mais le code n'a pas donné le résultat escompté
    il a mis à jour tous les enregitrements qu'il y ait 1 ou 2 enregistrements
    et quelque soit le résultat de la différences des quantités.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    en fait le problème vient de ma sous requête mais je ne sais pas comment la réécrire.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  Mouvement.code_stat
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.code_stat
    HAVING ( (dcount("type_mvt","ligne_mouvements")=2) AND  (dsum("qte_mvt","ligne_mouvements","type_mvt"="RF")-dsum("qte_mvt","ligne_mouvements","type_mvt"="LP"))=0);
    mais aucun enregistrement n'est trouvé

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Par défaut
    Je récapitule
    Je cherche, je cherche mais ne trouve pas...

    Je voudrais mettre à jour le champ Mouvement.code_stat de ma table Mouvement pour les enregistrements que je sélectionne à travers le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Mouvement.code_stat
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.code_stat, Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur]
    HAVING (((Count(ligne_mouvements.type_mvt))=2) AND ((Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)))=0));
    J'ai essayé la proposition de Jack78960 Mais ça ne marche pas. L'update proposé fait la mis à jour sur tous les enregistrements de la table au lieu de le faire uniquement sur les enregistrements séletionnés.

    J'ai installé Access 2003. Mais ce n'est pas un problème de version de Access.

    Citation Envoyé par Jack78960 Voir le message
    salut,
    essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE Mouvement
    SET Mouvement.code_stat = "C"
    WHERE Mouvement.code_stat in (SELECT  Mouvement.code_stat
    FROM Mouvement INNER JOIN ligne_mouvements ON (Mouvement.Date_creat = ligne_mouvements.Date_creat) AND (Mouvement.[N° bon consigne] = ligne_mouvements.[N° bon consigne])
    GROUP BY Mouvement.[N° bon consigne], Mouvement.Date_creat, Mouvement.[Code transporteur], Mouvement.code_stat
    HAVING (((Count(ligne_mouvements.type_mvt))=2) AND ((Sum(IIf([type_mvt]="RF",[qte_mvt],0))-Sum(IIf([type_mvt]="LP",[qte_mvt],0)))=0)));
    La différence ligne 3 :WHERE Mouvement.code_stat in

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

Discussions similaires

  1. [Oracle -> MySQL] requête UPDATE d'après un SELECT
    Par Paul TOTH dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/03/2010, 12h50
  2. Problème d'update après un select
    Par DarkenRahl dans le forum Hibernate
    Réponses: 2
    Dernier message: 26/11/2009, 14h59
  3. [MySQL] UPDATE après SELECT
    Par Guppy dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/03/2009, 23h42
  4. Problème d'update après un select
    Par nuandafr dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/04/2008, 15h31
  5. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05

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