我有一个Orders表,其中包含已订购图书的客户的CustID和BookNo。我有另一个包含所有BookNo的Books表。
我要显示订购了所有BookNo的所有自定义I。
像' in‘这样的函数,它将集合中的所有值都作为'AND’而不是'OR‘来匹配,这样会很方便。
有什么快速的线索,如果没有答案的话?
发布于 2013-03-07 19:26:54
要仅获取订购了所有图书的客户,您可以按每个客户分组,然后计算客户订购的图书数量,并将其与图书总数进行比较
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-07 19:37:39
select count from Orders group by custId having count(*) = (select count(distinct bookNo) from CustID );
发布于 2013-03-07 19:38:38
我不知道使用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。
https://stackoverflow.com/questions/15269868
复制相似问题