Requete sql

miniJulie -  
 miniJulie -
Bonjour, A tous

j'ai un exercice très long et j'ai presque tout trouver sauf une derniere requete...

si vous pouviez m'aider :

Trouver les noms et numéros de carte des inscrits qui participent à (au moins) un cours auquel participe Bonnard

schéma :

COURS(NomCours,Enseignant,Niveau)
INSCRIT(Nocarte,Nom,Age,Sexe)
PLANNING(NomCours,Jour,Lieu,Heure)
PATICIPATION(Nocarte,NomCours)

merci d'avance pour votre aide...cette question m'aura fait transpiré

37 réponses

  • 1
  • 2
  1. Melooo Messages postés 1476 Statut Membre 84
     
    Aurais tu une requête de "brouillon" qu'on pourrait éventuellement modifier ?
    0
  2. Baboun
     
    SELECT NoCarte, Nom
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard';
    0
  3. Melooo Messages postés 1476 Statut Membre 84
     
    Lui donner la réponse sans explication, ca lui permettra pas d'apprendre...
    0
  4. miniJulie
     
    j'avais tenté ça :

    SELECT INSCRIT .Nocarte, Nom
    FROM PARTICIPATION, INSCRIT as R ,INSCRIT, PARTICIPATION AS P
    Where Nom=' Bonnard' and
    PARTICIPATION.Nocarte= R. Nocarte and
    R.NomCours= INSCRIT. NomCours
    INSCRIT. Nocarte= P. Nocarte 
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Baboun
     
    SELECT NoCarte, Nom, SUM(NomCours) AS Nombre
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard'
    HAVING Nombre > 1;

    Tu affiches les noms et numéros de carte des inscrits puis tu compte le nombre de cours effectués par bonnard dans le select
    Ensuite tu prends les 3 tables suivantes pour pouvoir relié les infos.
    Puis dans le where tu réalise les relations entre les 3 tables, tu affecte bonnard à Nom vu que c'est de lui que tu veux avoir les infos.
    Et enfin ds le having, tu regarde si le nombre de cours est bien supérieur à 1.
    0
  7. Melooo Messages postés 1476 Statut Membre 84
     
    Alors tu as plusieurs erreur dans ta requête :
    Dans ton FROM tu met deux fois la même table.
    Je pense que tu as fais sa pour les alias mais tu peux mettre directement :
    FROM COURS C, INSCRIT I, PARTICIPATION P 
    

    Ce qui te permet d'utiliser C au lieu de Cours dans tes jointures
    Ensuite tu veux savoir qui as participer a au moins 1 cours de Bonnard,
    donc tu as besoin de la table participation, cours, et inscrit, et ensuite il te reste plus qu'a faire les jointures correspondantes.
    Je sais pas si je suis bien claire, mais de toute façon tu as la requête de Baboun toute prête
    0
  8. miniJulie
     
    Merci bien mais j'ai ces erreurs là :

    Msg 207, Niveau 16, État 1, Ligne 6
    Nom de colonne non valide : 'Nombre'.
    Msg 4104, Niveau 16, État 1, Ligne 6
    L'identificateur en plusieurs parties "Inscrit.Nocarte" ne peut pas être lié.
    Msg 209, Niveau 16, État 1, Ligne 1
    Nom de colonne 'NomCours' ambigu.
    0
  9. miniJulie
     
    Merci bien à toi de m'expliquer...mais sa requete ne marche pas lorsque je l'exécute...

    regarde au dessus j'ai posté les erreurs
    0
  10. Melooo Messages postés 1476 Statut Membre 84
     
    NomCours ambigu c'est normal étant donné qu'il est présent dans plusieurs table donc tu dois spécifier dans quelle table tu va le chercher :
    Partcipation.NomCours
    

    Essayes de mettre directement dans ton Having sa :
    SUM(NomCours) > 1
    
    0
  11. Baboun
     
    SELECT I.NoCarte, Nom, SUM(C.NomCours)
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard'
    HAVING ((SUM(C.NomCours) > 1));

    essaye ça
    0
  12. miniJulie
     
    j'ai ça :

    Msg 8117, Niveau 16, État 1, Ligne 1
    Le type de données de l'opérande char n'est pas valide pour l'opérateur sum.
    0
  13. Melooo Messages postés 1476 Statut Membre 84
     
    Essayes plutôt count que sum !
    parce que la il essaye de faire la somme de tes cours,
    exemple :
    informatique + mathematiques = ????
    0
  14. Baboun
     
    Oui je suis bête^^

    SELECT I.NoCarte, Nom, COUNT(I.NoCarte)
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard'
    HAVING (((SUM(I.NoCarte) )> 1)));

    Ca devrait être pas mal ça je pense
    0
  15. miniJulie
     
    Mdr merci bien à toi mais encore une erreur lol

    Msg 102, Niveau 15, État 1, Ligne 6
    Syntaxe incorrecte vers ')'.

    j'ai essayé d'en enlever et tout mais non lol
    0
  16. miniJulie
     
    ah attend il y en avait une de fermé en trop...

    maintenant j'ai ça :

    Msg 8117, Niveau 16, État 1, Ligne 1
    Le type de données de l'opérande char n'est pas valide pour l'opérateur sum.
    0
  17. Baboun
     
    SELECT I.NoCarte, Nom, COUNT(I.NoCarte)
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard'
    HAVING (((SUM(I.NoCarte) )> 1));
    0
  18. miniJulie
     
    idem erreur :

    Msg 8117, Niveau 16, État 1, Ligne 1
    Le type de données de l'opérande char n'est pas valide pour l'opérateur sum.
    0
  19. Melooo Messages postés 1476 Statut Membre 84
     
    remplacer le sum par le count même dans le having....
    0
  20. Baboun
     
    Avec la mienne ça devrai marcher^^

    SELECT I.NoCarte, Nom, COUNT(I.NoCarte)
    FROM COURS C, INSCRIT I, PARTICIPATION P
    WHERE C.NomCours = P.NomCours
    AND I.NoCarte = P.NoCarte
    AND Nom ='Bonnard'
    HAVING (((SUM(I.NoCarte)> 1)));
    0
  21. miniJulie
     
    En remplaçant le SUM par le COUNT j'ai ça :

    Msg 8120, Niveau 16, État 1, Ligne 1
    La colonne 'INSCRIT.Nocarte' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.

    sinon en le laissant :

    Msg 8117, Niveau 16, État 1, Ligne 1
    Le type de données de l'opérande char n'est pas valide pour l'opérateur sum.
    0
  • 1
  • 2