查找出现在"每个"列中的类别

时间:2016-11-06 09:01:36

标签: sql postgresql relational-division

我们为这个名为" Orders":

的表提供了这个模式
CREATE TABLE country(
    orderID VARCHAR,
    customerID INTEGER,
    shipperID VARCHAR
)

以下是该表的可视化,取自w3school的SQL教程:

enter image description here

我想获取每个shipperID至少订购一次的customerID。

这样做的一种方法是认识到只有三个独特的shipperID(1,2和3),因此我们可以执行三个笛卡尔积,并通过这种方式识别customerID。但是,我想以这样的方式编写查询,以至于许多shipperID的独特性并不重要。

使用关系代数,这可以通过除法相当简单地完成。有没有一种简单的方法可以在SQL中进行这样的查询?

1 个答案:

答案 0 :(得分:1)

可以是你可以使用..拥有和子选择

select CustomerID 
from Orders 
group by CustomerID
having count(distinct ShipperID) = ( select count(distinc ShipperID) from Orders)

分组给出每个CustomerID的shipperID号码。检查这是否等于ShipperID的总和