Requete sql

Fermé
miniJulie - Modifié par miniJulie le 2/11/2010 à 11:08
 miniJulie - 2 nov. 2010 à 12:37
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

Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:12
Aurais tu une requête de "brouillon" qu'on pourrait éventuellement modifier ?
0
SELECT NoCarte, Nom
FROM COURS C, INSCRIT I, PARTICIPATION P
WHERE C.NomCours = P.NomCours
AND I.NoCarte = P.NoCarte
AND Nom ='Bonnard';
0
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:15
Lui donner la réponse sans explication, ca lui permettra pas d'apprendre...
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:21
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
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
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
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:25
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
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
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
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:31
Essayes plutôt count que sum !
parce que la il essaye de faire la somme de tes cours,
exemple :
informatique + mathematiques = ????
0
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
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
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
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
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
Melooo Messages postés 1405 Date d'inscription vendredi 28 novembre 2008 Statut Membre Dernière intervention 18 mars 2013 84
2 nov. 2010 à 11:39
remplacer le sum par le count même dans le having....
0
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
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