一尘不染

如何查找另一个列表中是否包含一个列表/集

sql

我有一个产品ID列表,我想找出哪些订单包含所有这些产品。订单表的结构如下:

order_id | product_id
----------------------
1        | 222
1        | 555
2        | 333

显然,我可以使用PHP中的一些循环来做到这一点,但是我想知道是否有一种优雅的方法可以完全在mysql中完成。我理想的幻想查询将是这样的:

SELECT order_id
FROM orders
WHERE (222,555) IN GROUP_CONCAT(product_id)
GROUP BY order_id

有希望还是我应该去阅读托尔金?:)另外,出于好奇,如果不能在mysql中使用,是否还有其他具有此功能的数据库?


阅读 196

收藏
2021-03-08

共1个答案

一尘不染

你很亲密

SELECT order_id
FROM orders
WHERE product_id in (222,555) 
GROUP BY order_id
HAVING COUNT(DISTINCT product_id) = 2

关于关系代数中的“出于好奇”问题,这可以简单地通过除法来实现。AFAIK尚无RDBMS实施任何扩展,使其在SQL中变得如此简单。

2021-03-08