Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur 1111

invalid use of groupe

Sujet résolu
    24 août 2019 à 21:21:39

    Salut tout le monde , d'abord voici mes tables:

    donc ,quand j’exécute la requête suivante:

    select nom,eleve_id from eleve inner join jointure_eleve_cantine on eleve.id=MIN(eleve_id);

    j'obtient l’erreur.

    mais pourquoi?alors qu'avec une sous requête ça marche très bien ?

    merci d'avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      26 août 2019 à 9:28:46

      Bonjour,

      Car la syntaxe pour utiliser le MIN n'est pas bonne ...

      PE-Belamy18 a écrit:

      select nom,eleve_id from eleve inner join jointure_eleve_cantine on eleve.id=MIN(eleve_id);

      Que cherches-tu à faire avec cette requête ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        27 août 2019 à 20:39:56

        En fait , j'essaie juste d'obtenir des résultats quelconque afin de savoir pourquoi MIN ne marche pas avec des jointures c'est d'ailleurs mentionné dans le cours je pense de mysql que cette syntaxe ne fonctionne qu'avec des sous requêtes ,je pense que vous comprenez ce que je veux dire. Pouvez-vous m'expliquer pourquoi ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 août 2019 à 22:38:18

          Il faut nous dire ce que tu cherches à faire ...

          En l'état ta requête ne veut rien dire et une fonction d'agrégation s'utilise le plus souvent avec une clause GROUP BY...

          Avec une phrase en français, dis nous ce que tu voudrais récupérer,  genre "la liste des cantines liées à l'élève avec le plus petit ID" (si j'essaye de traduire ta requête).

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            28 août 2019 à 13:09:50

            voici le résultat que je veux obtenir :

            select nom,periode from eleve inner join jointure_eleve_cantine on eleve.id= min(jointure_eleve_cantine.eleve_id) inner join cantine on cantine.id=jointure_eleve_cantine.cantine_id ;


            mais ça ne marche pas !

            merci pour votre compréhension .

            • Partager sur Facebook
            • Partager sur Twitter
              28 août 2019 à 14:12:02

              Au risque de me répéter, ce que tu écris n'as pas de sens ...

              Benzouye a écrit:

              Avec une phrase en français, dis nous ce que tu voudrais récupérer, genre "la liste des cantines liées à l'élève avec le plus petit ID" (si j'essaye de traduire ta requête).

              Sans savoir ce que tu veux, et vu la syntaxe de ta requête, il est impossible de t'aider ... Essaye de formuler ton besoin avec une phrase, en oubliant un instant l'aspect SQL.

              -
              Edité par Benzouye 28 août 2019 à 14:13:01

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                28 août 2019 à 16:26:19

                Plus exactement, dans le cours MySQL chapitre sous requêtes 

                https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1964181-sous-requetes

                Il y a :Voici un exemple de requête avec sous-requête qu'il est impossible de faire avec une simple jointure : : SELECT id, nom, espece_id

                FROM Race

                WHERE espece_id = (

                    SELECT MIN(id) FROM Espece

                    -- Je rappelle que MIN() permet de récupérer la plus petite valeur de la colonne parmi les lignes sélectionnées

                    );

                Pourquoi ?

                • Partager sur Facebook
                • Partager sur Twitter
                  28 août 2019 à 16:37:28

                  Dans le cours, la requête a un sens ... Elle permet d'obtenir "la liste des races liées à l'espèce ayant le plus petit id" ... Tu remarqueras au passage que la fonction d'agrégat n'est pas utilisée dans la jointure mais dans la clause WHERE ...

                  PE-Belamy18 a écrit:

                  select nom,eleve_id from eleve inner join jointure_eleve_cantine on eleve.id=MIN(eleve_id);

                  Cette requête (en plus d'une erreur de syntaxe) ne veut rien dire ...

                  Je renouvelle donc ma question :

                  Benzouye a écrit:

                  Avec une phrase en français, dis nous ce que tu voudrais récupérer,  genre "la liste des cantines liées à l'élève avec le plus petit ID" (si j'essaye de traduire ta requête).

                  Si l'on veut bêtement corriger ta requête en s'appuyant sur l'exemple du cours, il faudrait faire :

                  SELECT E.nom, EC.eleve_id
                  FROM
                  	eleve E
                  		INNER JOIN jointure_eleve_cantine EC
                  			ON E.id = EC.eleve_id
                  WHERE EC.eleve_id = ( SELECT MIN(id) FROM eleve );

                  Mais cela n'a pas vraiment de sens ...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    28 août 2019 à 16:56:44

                    Merci, c'était exactement ce que je voulais comprendre.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    erreur 1111

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown