2013-03-07 7 views
0

J'ai une table Orders qui contient CustID et BookNo des clients qui ont commandé des livres. J'ai une autre table Livres qui contient tous les BookNo.Mysql - Opération comme IN qui correspond à toutes les valeurs

Je veux afficher tous les CustID qui ont commandé tous les BookNo.

Quelque chose comme la fonction 'IN' qui correspond à toutes les valeurs de l'ensemble comme 'AND' au lieu de 'OU' serait pratique.

Des indices rapides, sinon une réponse?

Répondre

0

Pour obtenir uniquement les clients qui ont commandé tous les livres que vous pouvez regrouper par chaque client et compter le nombre de livres un client a commandé et la comparer avec le nombre total de livres

select c.custid 
from customers c 
inner join books b on b.bookno = c.bookno 
group by c.custid 
having count(distinct b.bookno) = (select count(distinct bookno) from books) 
0

select custID du groupe Commandes par CustID ayant un compte (*) = (sélectionnez count (distinct bookNo) dans Books);

0

Pas conscient d'un moyen de le faire en utilisant IN ou similaire, mais un simple GROUP BY/HAVING devrait le faire bien. Le DISTINCT est ajouté pour s'assurer que deux commandes du même livre comptent toujours comme un seul livre.

SELECT CustID 
FROM Orders 
GROUP BY CustID 
HAVING COUNT(DISTINCT BookNo) = (SELECT COUNT(BookNo) FROM Books); 

An SQLfiddle for testing.

Questions connexes