Fonction correspodant à "dans tout" en SQL

Tyrael -  
 Tyrael -
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 :

https://imageshack.com/


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 :

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.

A voir également:

2 réponses

swed
 
Bonjour,

Si j'ai bien compris, on peut prendre le problème à l'envers :
Chercher ceux qui n'ont PAS de QCM pour lequel il n'y a PAS de question 1 ou 2.

Dans ce cas je te propose cette requête :

-- chercher tous les auteurs
SELECT DISTINCT info1.AUTEUR FROM INFOQCM info1
-- pour lesquels il n'existe pas
WHERE NOT EXISTS
-- un qcm de cet auteur
( SELECT 1 FROM INFOQCM info2, QCM qcm
WHERE info2.AUTEUR = info1.AUTEUR
AND info2.NumQCM = qcm.NumQCM
-- pour lequel il n'existe pas
AND NOT EXISTS
-- un réponse 1 ou 2 dans la composition de ce QCM
( SELECT 1 FROM COMPOQCM compo
WHERE compo.NumQCM = qcm.NumQCM
AND compo.NumQuestion IN (1, 2 )
)
)

Biensur j'ai pas testé, mais ce me semble sympa.

Cordialement, M.
2
Tyrael
 
Merci infiniment, cela fonctionne !!
Je n'arrivais pas à m'en sortir et je n'avais pas pensé à prendre le problème à l'envers comme tu l'as fait.
Je vais garder cette méthode de réflexion :)
Tu m'as en plus détaillé la requête ce qui m'a grandement aidé pour la compréhension de cette dernière c'est juste super.

Je peux enfin avancer, merci encore et à bientôt !


Cordialement !
0