【发布时间】:2012-09-29 10:44:11
【问题描述】:
我有一个产品 ID 列表,我想找出哪些订单包含所有这些产品。 Orders 表的结构如下:
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 中不可能,是否有任何其他数据库具有此功能?
【问题讨论】:
-
这是字符串类型的编程:
(222,555) IN GROUP_CONCAT(product_id),通常不鼓励使用。使用正确的基于集合的方法 -
气馁?我认为这甚至不会执行,更不用说产生任何有意义的结果。我相信我已经很清楚这是一个“幻想”查询,只是为了更好地了解我在寻找什么。
-
是的,我知道它甚至不是一个有效的结构。我明白了,我只是以为你真的想使用 group_concat ;-)
-
哦,我当然想使用 group_concat :)
-
这就是我所说的字符串类型编程 :-) 避免通过字符串方法(例如
group_concat)处理事物,尤其是当基于集合的正确方法可用时。字符串类型编程:stackoverflow.com/a/11846552 基于集合的正确编程:stackoverflow.com/a/11846457
标签: mysql sql relational-division