如何选择在ID集合中具有所有值的行

时间:2018-03-07 12:24:04

标签: mysql group-by distinct group-concat

标题可能不是我需要的描述。我有一个包含product_id和store_id列的表。我需要一种方法来获得所有具有product_ids集合的商店(store_id)(他们需要拥有我想要的所有产品)。例如:

+------------+----------+
| product_id | store_id |
+------------+----------+
|        10  |       1  |
|        20  |       1  |
|        10  |       2  |
|        20  |       2  |
|        30  |       1  |
|        30  |       3  |
|        20  |       3  |
+------------+----------+

我想选择所有包含产品10,20和30(所有商品)的商店。 在此示例中,只有商店1包含所有3个产品。其他两个商店(2和3)只有两个产品,而不是全部3个。

我想构建一个只返回所有库存产品的store_id的查询。 我正在尝试这样的事情,但这在逻辑上并不完全是我需要的。

SELECT st.product_id, GROUP_CONCAT(DISTINCT st.store_id SEPARATOR ",") 
AS store_ids 
FROM stock_table AS st 
WHERE st.product_id IN (10,20,30) 
GROUP BY st.product_id

1 个答案:

答案 0 :(得分:0)

您可以检查product_id的计数是否为3

SELECT st.product_id, GROUP_CONCAT(DISTINCT st.store_id SEPARATOR ",") AS store_ids store
FROM stock_table AS st 
WHERE st.product_id IN (10,20,30) 
GROUP BY store
having count(distinct st.product_id) = 3

这是原始答案

SELECT st.product_id, GROUP_CONCAT(DISTINCT st.store_id SEPARATOR ",") store
AS store_ids 
FROM stock_table AS st 
WHERE st.product_id IN (10,20,30) 

GROUP BY store 
having count(distinct product_id) = 3