Mysql - 像IN一样匹配所有值的操作

时间:2013-03-07 11:22:59

标签: mysql

我有一个表订单,其中包含已订购图书的客户的CustID和BookNo。 我有另一个表包含所有BookNo的书籍。

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

像'IN'这样的函数将集合中的所有值与'AND'而不是'OR'相匹配将会很方便。

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

通过CustID从订单组中选择custId具有count(*)=(从Books中选择count(distinct bookNo));

答案 2 :(得分: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