2013-03-07 85 views
0

我有一个表包含订购了Books的客户的CustID和BookNo的订单。 我有另一张表包含所有BookNo的书籍。Mysql - 与IN相匹配的所有值匹配的操作

我想显示订购了所有BookNo的所有CustID。

类似于'IN'函数将集合中的所有值都作为'AND'而不是'OR'会很方便。

任何快速的线索,如果不是答案?

回答

0

要获得只下令所有的书您可以将每个客户的客户再算上书籍顾客订购的数量,并将其与电子书的总人数比较

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
从订单组

选择CUSTID通过具有计数(*)=(从书籍中选择计数(明确的书号))的CustID);

0

不知道如何使用IN或类似的方法来做到这一点,但一个简单的GROUP BY/HAVING应该做得很好。添加DISTINCT是为了确保同一本书的两个订单仍然只计为一本书。

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

An SQLfiddle for testing