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 :

Erreur dans requête jointure et group by


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Erreur dans requête jointure et group by
    Je cherche à afficher les NCIN, les noms et les prénoms des clients ainsi que leurs nombres de locations et leurs durées de location moyennes seulement pour les clients qui ont effectué deux locations ou plus. J'arrive pas à exécuter cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ncin_cli, nom_cli, prénom_cli, count( ncin_cli ) , avg( durée_loc )
    FROM CLIENT , location
    WHERE client.ncin_cli = location.ncin_cli
    GROUP BY location.ncin_cli
    HAVING count( location.ncin_cli ) >=2 ;
    ça marche pour cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NCIN_Cli, COUNT( ncin_cli ) , AVG( durée_Loc ) FROM Location GROUP BY NCIN_Cli HAVING count( ncin_cli ) >=2
    Mais quand j'ajoute la jointure ce message d'erreur s'affiche :#1052 - Champ: 'ncin_cli' dans field list est ambigu
    J'ai essayé la requete sur easy php 1.8 et sur access
    voilà la représentation textuelle de BD
    Client (NCIN_Cli, Nom_Cli, Prénom_Cli, Tél_Cli, Ville_Cli)
    Véhicule (Matricule, Marque, Modèle, Année_Acq)
    Location (Matricule#, NCIN_Cli#, Date_Loc, Durée_Loc, Prix_Loc)

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    C'est mieux quand on fait les jointures proprement (les jointures implicites ne sont pas des jointures propres pour moi) avec des alias :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Loc.ncin_cli, Clt.nom_cli, Clt.prénom_cli, count( Loc.ncin_cli ) , avg( Loc.durée_loc )
    FROM CLIENT Clt
    INNER JOIN location Loc ON Clt.ncin_cli  = Loc.ncin_cli
    GROUP BY Loc.ncin_cli, Clt.nom_cli, Clt.prénom_cli
    HAVING count( loc.ncin_cli ) >=2 ;


    PS : Les alias ne sont pas obligatoires mais ça oblige alors à mettre les noms de tables à la place. Dans les grosses requêtes ça peut être très long à écrire
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par sevyc64 Voir le message
    C'est mieux quand on fait les jointures proprement (les jointures implicites ne sont pas des jointures propres pour moi) avec des alias :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Loc.ncin_cli, Clt.nom_cli, Clt.prénom_cli, count( Loc.ncin_cli ) , avg( Loc.durée_loc )
    FROM CLIENT Clt
    INNER JOIN location Loc ON Clt.ncin_cli  = Loc.ncin_cli
    GROUP BY Loc.ncin_cli, Clt.nom_cli, Clt.prénom_cli
    HAVING count( loc.ncin_cli ) >=2 ;


    PS : Les alias ne sont pas obligatoires mais ça oblige alors à mettre les noms de tables à la place. Dans les grosses requêtes ça peut être très long à écrire
    Merci pour vous

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

Discussions similaires

  1. [MySQL-5.0] Erreur dans requête jointure et group by
    Par imene_s dans le forum MySQL
    Réponses: 1
    Dernier message: 12/02/2015, 10h29
  2. Erreur dans requête SQL
    Par Gaetch dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/11/2008, 07h20
  3. [2000] Erreur dans requêtes successives
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/11/2007, 20h39
  4. Erreur dans requête : blabla fonction d'agrégat
    Par The_Super_Steph dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/06/2007, 10h55
  5. erreur dans une jointure HQL
    Par Galak extra dans le forum Hibernate
    Réponses: 8
    Dernier message: 14/08/2006, 00h59

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