首页 > 解决方案 > 如何检查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

标签: mysqlsqlquery-builder

解决方案


你可以使用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是一种反模式。

相关文章:mySQL 和 postgreSQL 中的 Group by 子句,为什么 postgreSQL 中的错误?


推荐阅读