我有一个产品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中使用,是否还有其他具有此功能的数据库?
你很亲密
SELECT order_id FROM orders WHERE product_id in (222,555) GROUP BY order_id HAVING COUNT(DISTINCT product_id) = 2
关于关系代数中的“出于好奇”问题,这可以简单地通过除法来实现。AFAIK尚无RDBMS实施任何扩展,使其在SQL中变得如此简单。