我有一个表订单,其中包含已订购图书的客户的CustID和BookNo。 我有另一个表包含所有BookNo的书籍。
我想显示订购了所有BookNo的所有CustID。
像'IN'这样的函数将集合中的所有值与'AND'而不是'OR'相匹配将会很方便。
任何快速线索,如果不是答案?
答案 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);