Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 01h25   #1
Membre à l'essai
 
Inscription : mai 2008
Messages : 83
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 83
Points : 21
Points : 21
Par défaut Equivalent de fonction "dans tout" dans une requête

Bonjour,

Voilà je dois gérer un système de QCM avec Auteurs, questions, réponses dont le schéma de la base de données est comme suit :

http://yfrog.com/65capturelep


Mon soucis est que je dois réussir à lister les auteurs dont les questions 1 OU 2 font parties de TOUS les QCM de l'auteur.

Par exemple, si Dupont a fait 2 QCM, l'un avec la question 1, l'autre avec la question 2 alors on l'affiche dans le résultat.
Si Dupond a fait 2 autres QCM, l'un avec la question 2 et l'autre avec la question 9, alors on ne l'affiche pas dans la sélection car il n'y a pas la question 1 ou 2 dans les deux QCM créés par Dupond...

Voilà le début d'une requête que j'ai fait, mais je n'arrive pas à aller plus loin, je ne vois pas comment dire "Regarde dans tous les QCM de l'auteur si les questions 1 OU 2 sont présentes".

Voilà ma requête :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SELECT DISTINCT Auteur
FROM INFOQCM
INNER JOIN QCM ON INFOQCM.NumQCM = QCM.NumQCM
INNER JOIN COMPOQCM ON QCM.NumQCM = COMPOQCM.NumQCM
WHERE COMPOQCM.NumQCM
IN (
 
SELECT COMPOQCM.NumQCM
FROM COMPOQCM
WHERE COMPOQCM.NumQuestion =1
)
OR COMPOQCM.NumQCM
IN (
 
SELECT COMPOQCM.NumQCM
FROM COMPOQCM
WHERE COMPOQCM.NumQuestion =2
)
GROUP BY Auteur

Pourriez-vous m'aider ?


Merci d'avance.

Bonne journée.
Tyra3l est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 08h52   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
Il faudrait que tu donnes la description de tes tables parce que les noms de celles-ci et des colonnes ne sont pas toujours très explicites.
D'où vient la colonne Auteur ? Quelle table permet de rattacher un QCM et son auteur ?
Que contiennent les tables ?

Pour résoudre ton problème, décompose-le.
Citation:
lister les auteurs dont les questions 1 OU 2 font parties de TOUS les QCM de l'auteur.
Fais une sous-requête comptant le nombre de QCM par auteur.
Quelque chose dans le genre :
Code :
1
2
3
SELECT Auteur, COUNT(*) AS nb_QCM
FROM QCM
GROUP BY Auteur
Compte maintenant par auteur le nombre de QCM où figurent les questions 1 ou 2 et ne conserve que les auteurs dont ce nombre est égal au nombre total de questionnaires de l'auteur. Ça devrait ressembler à ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT q.Auteur
FROM COMPOQCM AS c
INNER JOIN QCM AS q ON q.NumQCM = c.NumQCM
WHERE c.NumQuestion IN (1,2)
GROUP BY q.Auteur
HAVING COUNT(DISTINCT q.NumQCM) = 
(
    SELECT Auteur, COUNT(*) AS nb_QCM
    FROM QCM
    GROUP BY Auteur
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h52   #3
Membre à l'essai
 
Inscription : mai 2008
Messages : 83
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 83
Points : 21
Points : 21
Merci beaucoup grâce à tes explications et tes exemples j'ai pu enfin me débloquer et résoudre mon soucis.

Merci infiniment pour les précieuses aides et indices.

A bientôt !

Cordialement,
Tyra3l est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h51.


 
 
 
 
Partenaires

Hébergement Web