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

Melooo Messages postés 1476 Statut Membre 84
 
Aurais tu une requête de "brouillon" qu'on pourrait éventuellement modifier ?
0
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
Melooo Messages postés 1476 Statut Membre 84
 
Lui donner la réponse sans explication, ca lui permettra pas d'apprendre...
0
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

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

Posez votre question
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
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
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
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
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
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
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
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
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
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
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
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
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
Melooo Messages postés 1476 Statut Membre 84
 
remplacer le sum par le count même dans le having....
0
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
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