sql - 查找列中出现在 "every"类别中的元素

标签 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 中进行这样的查询?

最佳答案

可能是你可以使用一个组......有一个子选择

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

分组依据为每个 CustomerID 提供 shipperID 的数量 .. 检查这是否等于 ShipperID 的总数

关于sql - 查找列中出现在 "every"类别中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40447606/

相关文章:

c# - 如何根据作为 varchar 传递的 ids 列表获得结果?

database - 在 RedHat 中从 postgresql 9.2 升级到 9.6 时出现错误 unix_socket_directory

sql - 仅使用具有 `in` 子句中所有值的列连接查询

SQL 聚合唯一对

sql - 如何检测存储过程是否已经存在

sql - ORA-01861: 文字与格式字符串不匹配

sql - 在 Postgres 8.4 中为每一行调用一次函数进行更新

MySQL select join where AND where

php - 如何从表格中显示相关任务列表?

sql - Postgresql中根据条件获取上一条记录