0

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

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

将集合中的所有值匹配为“AND”而不是“OR”的“IN”函数之类的东西会很方便。

任何快速的线索,如果没有答案?

4

3 回答 3

0

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

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

一个用于测试的 SQLfiddle

于 2013-03-07T11:38:38.190 回答
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)
于 2013-03-07T11:26:53.800 回答
0

通过具有 count(*) = (select count(distinct bookNo) from Books) 的 CustID 从 Orders 组中选择 custId;

于 2013-03-07T11:37:39.343 回答