我有一个订单表,其中包含订购书籍的客户的 CustID 和 BookNo。我有另一个表 Books,其中包含所有 BookNo。
我想显示订购了所有 BookNo 的所有 CustID。
将集合中的所有值匹配为“AND”而不是“OR”的“IN”函数之类的东西会很方便。
任何快速的线索,如果没有答案?
我有一个订单表,其中包含订购书籍的客户的 CustID 和 BookNo。我有另一个表 Books,其中包含所有 BookNo。
我想显示订购了所有 BookNo 的所有 CustID。
将集合中的所有值匹配为“AND”而不是“OR”的“IN”函数之类的东西会很方便。
任何快速的线索,如果没有答案?
不知道使用IN
或类似方法可以做到这一点,但是一个简单的GROUP BY
/HAVING
应该可以很好地做到这一点。添加 是为了确保同一本书的DISTINCT
两个订单仍然算作一本书。
SELECT CustID
FROM Orders
GROUP BY CustID
HAVING COUNT(DISTINCT BookNo) = (SELECT COUNT(BookNo) FROM Books);
要仅获取订购所有书籍的客户,您可以按每个客户分组,然后计算客户订购的书籍数量并将其与书籍总数进行比较
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)
通过具有 count(*) = (select count(distinct bookNo) from Books) 的 CustID 从 Orders 组中选择 custId;