Fonction correspodant à "dans tout" en SQL
Tyrael
-
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 :
Pourriez-vous m'aider ?
Merci d'avance.
Bonne journée.
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:
- Fonction correspodant à "dans tout" en SQL
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer dans word - Guide
- Logiciel sql - Télécharger - Bases de données
2 réponses
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.
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.
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 !
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 !