Partage
  • Partager sur Facebook
  • Partager sur Twitter

probleme avec requete select

sql (jointure)

Sujet résolu
    9 septembre 2010 à 18:03:05

    salut a tous, ma question concerne une requete sql non plus du PHP:
    j`ai 2 table (EXAMEN et TEST):
    EXAMEN: 1 seul champ Int_Exa qui est le clé primaire
    TEST: 3 champs(Id_Test comme clé primaire,Rep_Correctes,et Int_Exa qui est un clé étrangère)
    je cherche une requete qui me retourne pour chaque examen combien ya de tests??
    j`avais essayé ca:
    SELECT T1.Int_Exa,count(*) as 'TOTAL' from TEST T1,TEST T2 where T1.Int_Exa=T2.Int_Exa;
    

    ca pas marché :D
    alors je fesais:

    SELECT EXAMEN.Int_Exa,count(Id_Test) from EXAMEN,TEST where EXAMEN.Int_Exa=TEST.Int_Exa;
    

    ca pas marché aussi :D
    merci pour toutes suggestions :)
    • Partager sur Facebook
    • Partager sur Twitter
      9 septembre 2010 à 18:06:22

      SELECT COUNT(test.*) AS tests, examen.id AS exam
      FROM examen
      INNER JOIN test
      ON examen.id = test.Int_Exa -- Ils sont bizarres tes noms de champs
      GROUP BY exam
      ORDER BY exam ASC
      

      Est-ce le GROUP BY qui t'a gêné ? :)
      • Partager sur Facebook
      • Partager sur Twitter
        9 septembre 2010 à 18:28:46

        la clé primaire de ma table EXAMEN est Int_Exa (intitulé examen) et non pas id, de plus votre requete ne marche pas :(
        merci en tout cas pour l`aide :)
        • Partager sur Facebook
        • Partager sur Twitter
          9 septembre 2010 à 18:36:06

          je travaille sous vb.net et donc j`ai peur de vous faire confusion ou mal comprehension si je vous montre l`erreur que j`obtenais, alors s`il y a erreur l`essentiel que la requete n`est pas valable ;)
          • Partager sur Facebook
          • Partager sur Twitter
            9 septembre 2010 à 18:45:54

            S'il y a une erreur quelque part, il faut comparer le code supposé responsable et le message d'erreur généré. C'est une règle d'or dans tous les domaines de la prog.
            • Partager sur Facebook
            • Partager sur Twitter
              9 septembre 2010 à 18:52:56

              ok ;)
              pour ma deuxieme tentative j`obtenais l`erreur:
              you tried to execute a query that does not include the specified expression 'Int_Exa' as part of an aggregate function.
              

              pour la votre, l`erreur est la suivante:
              syntax error in query expression 'COUNT(test.*)'
              
              • Partager sur Facebook
              • Partager sur Twitter
                9 septembre 2010 à 19:36:14

                En encadrant les noms de tables et de champs avec le guillemet oblique (AltGR+7) ça marchera sûrement mieux.
                • Partager sur Facebook
                • Partager sur Twitter
                  9 septembre 2010 à 22:27:03

                  Non, la requête est simplement incorrecte et Lucaazori semble utiliser un SGBDR plus intelligent que MySQL.

                  Sinon, j'ai aucune idée pourquoi tu postes dans le forum PHP alors que le problème concerne les bases de données et que tu n'utilises même pas PHP.

                  Pour le problème, je vois pas pourquoi il faudrait une jointure, tu as déjà toutes les informations dans la table TEST. Une simple requête comme celle-ci devrait fonctionner :
                  SELECT Int_Exa, COUNT(*) AS nbrTest
                  FROM TEST
                  GROUP BY Int_Exa;
                  
                  .

                  P.S. On dit des colonnes, pas des champs.
                  P.P.S. Tu utilises une syntaxe de jointure dépréciée depuis un bon moment. Utilise plutôt INNER JOIN lorsque tu veux faire une jointure interne.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 septembre 2010 à 20:37:07

                    la table examen peut contenir des examens(Int_Exa) qui n`existent pas dans la table TEST (l`utilisateur a ajouté un examen mais n`a pas encore le configuré) dans ce cas ca dois s`afficher avec un nombre de test egal a zero ;)
                    merci pour vos interventions, j`avais essayé ca en fait:
                    SELECT EXAMEN.Int_Exa, ISNULL(T.nbrTest, 0) AS nbrTest FROM EXAMEN LEFT JOIN (SELECT int_Exa, COUNT(*) as nbrTest FROM TEST GROUP BY int_Exa) AS T ON EXAMEN.Int_Exa = T.Int_Exa ORDER BY EXAMEN.Int_Exa;
                    

                    ca retourne l`erreur suivante:
                    wrong number of arguments used with function in query expression 'ISNULL(T.nbrTest,0'.
                    

                    c`etais pas comme ca qu`on utilisait la fonction ISNULL ?? j`aimerais bien m`aider a resoudre le truc :) car la tache correspondante dans l`application que je suis entrain de concevoire s`arrete sur l`optimalité de cette requete :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 septembre 2010 à 20:39:21

                      La requête que je t'avais donnée par MP ne marche pas ?

                      SELECT E.Int_Exa, COUNT(T.*) as nbrTest
                      FROM EXAMEN E
                      LEFT OUTER JOIN TEST T
                          ON E.Int_Exa = T.IntExa
                      GROUP BY E.Int_Exa;
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 septembre 2010 à 20:52:00

                        salut, je tiens a vous remercier d`abord Fayden :)
                        En fait j`ai tenté ta requete, elle marche pas :( , ca me donne l`erreur suivante:

                        Syntax error in query expression 'COUNT(T.*)'.
                        

                        penses avec moi a ma requete et la fonction ISNULL peut etre ^^
                        j`utilises ACCESS 2007 avec l`application
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 septembre 2010 à 20:52:46

                          J'imagine que ton SGBDR n'aime pas T.*, remplace-le par COUNT(*).
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 septembre 2010 à 21:04:04

                            non j`ai essayé tout :D mais ca me donne toujours erreur, syntaxiquement et logiquement ca me parait juste mais bon, ACCESS aura le dernier mot :(
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 septembre 2010 à 23:50:56

                              Essaye de remplacer le count par
                              count('x')
                              

                              Sinon la dernière requète de Fayden est la bonne.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 septembre 2010 à 15:09:55

                                salut, j`ai essayé cette requete et elle marche trés bien:
                                thank you, i tried this :
                                [CODE]SELECT EXAMEN.Int_Exa, IIF(ISNULL(T.nbrTest), 0, T.nbrTest) AS nbrTest FROM EXAMEN LEFT JOIN (SELECT int_Exa, COUNT(*) as nbrTest FROM TEST GROUP BY int_Exa) AS T ON EXAMEN.Int_Exa = T.Int_Exa ORDER BY EXAMEN.Int_Exa[/CODE]
                                it worked fine, thank you again for help 
                                

                                c`était pas facile de m`adapter avec ce genre de requete dont je suis pas a l`aise puisque je travaillais avec le SFW habitule et les requetes corrélées ;)
                                merci encore de vos interventions :)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                probleme avec requete select

                                × 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