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.

2 réponses

  1. 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
  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