[SQL] fonction equivalente à "all in"

Résolu/Fermé
coq - 1 déc. 2009 à 10:48
 coq - 2 déc. 2009 à 09:33
Bonjour,

Je cherche une fonction qui permette de vérifier qu'une série d'éléments font TOUS partie d'une selection.

Exemple :
Numéro des etudiants possédant un livre sur chaque sujet existant.

etudiant : numero,
livre : numero, sujet

select distinct(etudiant.numero)
from etudiant,livre
where etudiant.numero=livre.numero AND livre.sujet "all in" (
select distinct(sujet)
from livre);

J'ai mis "all in" pour l'endroit posant probleme mais bien sur ca ne marche pas... Avez-vous une idée ?

2 réponses

toma_f_1 Messages postés 89 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 16 décembre 2009 7
1 déc. 2009 à 17:52
bonjour,

le in ne suffit pas car il regarde juste si le sujet est dans un ensemble pas si les deux ensembles sont égaux.

j'ai testé ton cas, et je fait l'astuce suivante :

recuperer tous les etudiants ou le nombre des différents sujets de livres empruntés correspond au nombre total de sujet de livre

dans mon exemple ca donne ca : j'espere que ca peux t'aider.

select et.id_etud from etudiants et, emprunt em, livre l, typeL tl
where em.id_etud = et.id_etud
and em.id_livre = l.id_livre
and l.id_typeL = tl.id_typeL
group by et.id_etud
having count(distinct tl.id_typeL) =

(
select count(distinct tl0.id_typeL)
from typeL tl0
)

bon par contre pas sur que ce soit super optimisé niveau perfs.
1
Je n'ai pas fait exactement comme toi mais j'ai repris ton idée de comptage et ca marche. Merci !
0
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
1 déc. 2009 à 13:59
Bonjour.

Avec IN à la place de "all in", c'est pas bon?
0