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 :

Requete update avec jointure d'une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut Requete update avec jointure d'une requête
    Bonjour à tous,

    J'ai deux tables : COMMUNE et DEPARTEMENT.
    Dans COMMUNE, j'ai nb_hab_comm qui est le nombre d'habitant par commune
    J'ai également le numéro de département à laquelle la commune appartient.

    Dans DEPARTEMENT, j'ai un champ à alimenter qui est le nombre d'habitant par departement.

    Je peux alimenter ce champ en faisant une somme des nb_hab_comm de chaque commune du département :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dept, sum(nb_hab_comm) AS nb_hab
    FROM commune
    GROUP BY dept;

    Enfin, je compte l'imbriquer avec dans la requete UPDATE pour affecter la bonne valeur à la table DEPARTEMENT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE departement INNER JOIN
    (
    SELECT dept, sum(nb_hab_comm) AS nb_hab
    FROM commune
    GROUP BY dept
    ) REQUETE
    ON REQUETE.idDepartement = DEPARTEMENT.idDepartement
    SET DEPARTEMENT.pop_comm = REQUETE.nb_hab
    Et là, access me jette en me disant :
    l'opération doit utiliser une requete qui peut etre mise à jour

    En fait, il veut absolument faire une jointure avec une deuxième table ! Il ne veut pas de ma requête !
    Comment faire pour éviter de créer une deuxième table pour copier / coller le résultat de la première requete et pour que cette requete update fonctionne ?

    Je ne sais pas si je suis très clair.

    Merci pour votre aide !

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Ta requête UPDATE, je la verrai plutôt comme ça...
    Qu'en penses-tu ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE departement 
    SET departement.pop_comm = ( 
        SELECT sum(commune.nb_hab_comm) AS nb_hab 
        FROM commune 
        WHERE commune.idDepartement = departement.idDepartement 
    )
    _

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut
    Bonjour JBO,

    J'ai essayé avec cette requête mais j'obtiens le même message d'erreur.
    La requête update ne veut pas du select :
    l'opération doit utiliser une requete qui peut etre mise à jour
    C'est quand même bizarre que l'on puisse pas faire ce genre de requête ?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par bart64
    J'ai essayé avec cette requête mais j'obtiens le même message d'erreur.
    La requête update ne veut pas du select :
    l'opération doit utiliser une requete qui peut etre mise à jour
    C'est quand même bizarre que l'on puisse pas faire ce genre de requête ?
    Pardon pour ma franchise, mais ce message d'erreur n'a pas de sens dans ce contexte.

    Une requête UPDATE est une ACTION.
    Il ne s'agit pas d'une "requête qui peut être mise à jour".
    Pour être très clair:
    "Une requête qui peut être mise à jour" est une requête SELECT, qui retourne un jeu d'enregistrements, ceux ci pouvant faire l'objet d'une modification, par le truchement d'un Recordset exploité directement ou affiché dans un formulaire ou une feuille de données.
    Parfois, la nature de la requête SELECT empêche la mise à jour des données.
    Par exemple, si on fait un regroupement (GROUP BY et/ou opération d'agrégation des données telle que SUM, COUNT...), une UNION, un SELECT DISTINCT...
    Tu n'es pas dans cette situation.

    Donc, j'en déduis que le Pb est ailleurs.
    Erreur de syntaxe ?
    Mauvaise utilisation de la requête ?
    Autre chose ?

    Si tu veux plus d'aide il va falloir nous donner plus d'éléments.

    Pour commencer, tes tables de travail sont-elles stockées dans un fichier MDB ou sur un Serveur SQL?
    _

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut
    Merci JBO,

    En fait, si je dis que la requête update ne veut pas du select, c'est parce que :
    si je colle dans une table temporaire le résultat de cette sous-requête
    et que je remplace la sous-requête par le nom de la table temporaire,
    alors ça fonctionne.

    Mais l'erreur vient effectivement peut-être d'ailleurs.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par bart64
    En fait, si je dis que la requête update ne veut pas du select, c'est parce que :
    si je colle dans une table temporaire le résultat de cette sous-requête
    et que je remplace la sous-requête par le nom de la table temporaire,
    alors ça fonctionne.
    Je te confirme que la requête ci-dessous ne peut pas être mise à jour !
    En effet, comment pourrait-t-on modifier la valeur du champ nb_hab, puisqu'il s'agit du résultat d'une opération SUM !?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT sum(commune.nb_hab_comm) AS nb_hab 
    FROM commune 
    WHERE commune.idDepartement = departement.idDepartement
    De toute façon, ça ne devrait pas avoir la moindre incidence s'il s'agit d'une sous-requête utilisée dans une requête UPDATE.
    Citation Envoyé par bart64
    Mais l'erreur vient effectivement peut-être d'ailleurs.
    As-tu essayé d'exécuter cette requête au moyen d'une procédure VBA, juste pour voir ce qui se passe...

    code pas testé ; c'est juste pour te donner une petite idée !
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Sub UpdateCoriace()
        Dim SQL As String
     
        SQL = "UPDATE departement " & _
            "SET departement.pop_comm = ( " & _
            "SELECT sum(commune.nb_hab_comm) AS nb_hab " & _
            "FROM commune " & _
            "WHERE commune.idDepartement = departement.idDepartement) "
     
        CurrentDb.Execute SQL
    End Sub
    Bon courage, on reste à l'écoute.
    _

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut
    Un grand merci JBO !
    Je vais passer par l'update coriace ! Je te remercie.

    Sinon, je continue à chercher car s'il existe une solution, je veux absolument la connaître !
    Je vous tiens bien évidemment au courant si j'en sais plus.

  8. #8
    Membre régulier Avatar de samuelsiffert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    Bonjour,

    A essayer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE departement 
    SET departement.pop_comm = DSum("[nb_hab_comm]", "commune", "[commune.idDepartement] = " & departement.idDepartement)
    @+

    Sam
    (Access 97)

    *SVP marquez vos discussions quand c'est le cas.

    @+

    Sam.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Cette requête fonctionne ! C'est pas très propre mais c'est une solution !
    Merci beaucoup samuelsiffert !

  10. #10
    Membre régulier Avatar de samuelsiffert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 98
    Points : 109
    Points
    109
    Par défaut
    Re,

    Moi non plus j'aime pas trop mettre du VBA dans une requête mais faut bien avouer que parfois c'est bien pratique !
    (Access 97)

    *SVP marquez vos discussions quand c'est le cas.

    @+

    Sam.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 259
    Points : 97
    Points
    97
    Par défaut
    Je partage complètement ton avis.
    Merci beaucoup !

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

Discussions similaires

  1. [UPDATE] avec jointure sur une requete
    Par userB dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/07/2007, 16h18
  2. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 11h03
  3. Pb avec composition d'une requête SQL : DButils UPDATE
    Par Paloma dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2007, 20h30
  4. requete update avec une condition
    Par youtou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/06/2006, 20h55
  5. Afficher une requete MYSQL avec jointure
    Par Higestromm dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/12/2005, 15h52

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