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

Langage SQL Discussion :

Erreur requête sql


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut Erreur requête sql
    Bonjour,

    Pourquoi cette requête engendre un problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select slcl.l from (
    select libelle l,count(libelle) cl FROM modele m 
    inner join salon s on s.codemod=m.codemod
     inner join vente v on s.numserie=v.numserie 
    group by libelle
    ) as slcl having slcl.cl=max(slcl.cl);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'slcl.cl' in 'having clause'
    Merci de m'orienter vers la solution.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Cette requête est incompréhensible... Déjà vous n'avez pas de GROUP BY sur la requête externe et appelez une colonne directement (slcl.l) puis vous faites un MAX dans le HAVING. Cela ne peut tout simplement pas fonctionner.

    A +

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Qu'est-ce que cette requête est censée faire ?
    Le savoir serait utile pour la corriger.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Pour mieux comprendre, la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select libelle l,count(libelle) cl FROM modele m 
    inner join salon s on s.codemod=m.codemod
     inner join vente v on s.numserie=v.numserie 
    group by libelle;
    affiche le résultat suivant:
    Nom : résultat req.jpg
Affichages : 210
Taille : 3,9 Ko

    Alors, je veux sélectionner de ce résultat le "l" qui a le max de "cl"???

    J'ai procédé alors de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select slcl.l from (
    select libelle l,count(libelle) cl FROM modele m 
    inner join salon s on s.codemod=m.codemod
     inner join vente v on s.numserie=v.numserie 
    group by libelle
    ) as slcl having slcl.cl=max(slcl.cl);

    Merci de m'orienter vers la solution.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Donc quelque chose comme ça :
    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
    WITH    slcl
        AS  (   SELECT  libelle l
                    ,   COUNT(libelle) cl 
                FROM    modele  AS  m 
                    INNER JOIN 
                        salon   AS  s 
                        ON  s.codemod = m.codemod
                    INNER JOIN 
                        vente   AS  v 
                        ON  s.numserie = v.numserie 
                GROUP BY libelle
            ) 
    SELECT  det.l 
    FROM    slcl    AS  det
    WHERE   EXISTS
            (   SELECT  NULL
                FROM    slcl    AS  sel
                HAVING  det.cl = MAX(sel.cl)
            )
    ;

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Merci pour votre réponse, est ce que vous pouvez me proposer une requête plus simple.

    Déjà celle proposée engendre l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slcl
        AS  (   SELECT  libelle l,COUNT(libelle) cl
                FROM    mode' at line 1

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Qu'est-ce qui te semble compliqué dans cette requête ?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 385
    Points : 39 883
    Points
    39 883
    Billets dans le blog
    9
    Par défaut
    Ou également (si votre sgbd ne connait pas les fonctions de fenêtrage, ex : MySQL ou MS-Access)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Select * from   (ou select TOP 1 si SQLServer)                     
          (Select Libelle, count(*)               
           From modele m 
           inner join salon s 
              on s.codemod=m.codemod
           inner join vente v 
              on s.numserie=v.numserie                             
           GROUP BY Libelle
           ORDER BY count(*) DESC)                      
       Fetch first 1 rows only  ou LIMIT 1 selon le SGBD

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Alors, cette requête
    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
    WITH    slcl
        AS  (   SELECT  libelle l
                    ,   COUNT(libelle) cl 
                FROM    modele  AS  m 
                    INNER JOIN 
                        salon   AS  s 
                        ON  s.codemod = m.codemod
                    INNER JOIN 
                        vente   AS  v 
                        ON  s.numserie = v.numserie 
                GROUP BY libelle
            ) 
    SELECT  det.l 
    FROM    slcl    AS  det
    WHERE   EXISTS
            (   SELECT  NULL
                FROM    slcl    AS  sel
                HAVING  det.cl = MAX(sel.cl)
            )
    ;
    engendre l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'slcl
        AS  (   SELECT  libelle l,COUNT(libelle) cl
                FROM    mode' at line 1
    Remarque: j’utilise MYSQL.

    Merci de m'orienter vers la solution.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Aussi, cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select slcl.l from (
    select libelle l,count(libelle) cl FROM modele m 
    inner join salon s on s.codemod=m.codemod
     inner join vente v on s.numserie=v.numserie 
    group by libelle
    ) as slcl having slcl.cl=max(slcl.cl);
    engendre l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'slcl.cl' in 'having clause'
    Remarque: j’utilise MYSQL.

    Merci de m'orienter vers la solution.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Voici la description des tables utilisées:

    Salon(NumSerie,codeMod#,couleur,prixvente)

    Modele(CodeMod,Libelle)

    Vente(CodeVente,DateVente,NumSerie#)

    La question est le libelle du salon le plus vendu.

    Qu'est ce que vous proposez?

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    En posant ta question sur le forum Langage SQL, sans préciser le SGBD que tu utilises, les réponses proposées s'appuient sur la syntaxe du langage SQL normalisé et non le dialecte limité de MySQL.
    MySQL ne prend pas en charge les CTE (Expressions de table : WITH <alias> AS (<requête>)...).
    Dans la requête que je t'ai proposée, tu dois donc remplacer l'alias slcl dans chaque clause FROM par la sous-requête décrite dans la clause WITH.

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    Désolé, j'ai pas bien compris votre remarque. La requête devient quoi?
    Merci.

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 385
    Points : 39 883
    Points
    39 883
    Billets dans le blog
    9
    Par défaut
    En ce cas utilisez la solution que j'ai postée hier à 11h00, j'avais justement précisé que c'était à utiliser dans le cas de MySQL

  15. #15
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    Points : 31
    Points
    31
    Par défaut
    oui, vous avez raison, c'est résolu merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 11h56
  2. [XL-2003] Erreur requête SQL en VBA dans Excel : colonne contenant des chiffres et des lettres
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/08/2009, 14h49
  3. Erreur requête SQL en VBA dans Excel
    Par Sergeith dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2009, 16h06
  4. [MySQL] Erreur requête SQL
    Par miniBob dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 12/06/2008, 16h44
  5. erreur requète SQL : trop peu de paramètres
    Par pierre.egaud dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 21/04/2006, 15h57

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