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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    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 999
    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 999
    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 +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    Qu'est-ce que cette requête est censée faire ?
    Le savoir serait utile pour la corriger.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    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 : 221
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 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    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)
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    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 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    Qu'est-ce qui te semble compliqué dans cette requête ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 603
    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 603
    Billets dans le blog
    10
    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
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 51
    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.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 10h56
  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, 13h49
  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, 15h06
  4. [MySQL] Erreur requête SQL
    Par miniBob dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 12/06/2008, 15h44
  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, 14h57

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