mysql - 如何检查sql中Where In子句中是否存在所有数组元素
问题描述
我面临一个创建一个 sql 查询的问题。实际上我想检查 where 子句是否存在所有元素,如果 WhereIn 子句中存在所有元素,那么我想用 groupby 返回该记录。这是我的一个表 produt_categories :-
id product_id category_id
1 1 1
2 1 2
播种时我申请其中如下: -
SELECT * FROM `product_categories`
WHERE category_id in (1,2,3) group by(product_id);
现在它返回我这个结果: -
id product_id category_id
1 1 1
实际上它返回我很好,因为 whereIn 子句的实际行为。所以我想如果所有 category_id 1,2,3 都存在,那么它必须显示记录。如果我通过 1,2 那么我也会来。希望你们理解。请帮助我创建qyuery
解决方案
你可以使用HAVING
:
SELECT *
FROM `product_categories`
WHERE category_id in (1,2,3)
group by(product_id)
HAVING COUNT(DISTINCT category_id) = 3; -- #elements from `IN` clause
SELECT * FROM tab GROUP BY col
是一种反模式。