MySQL 5.7中如何根据子ID列表查询精确匹配的父ID
问题解决:查询仅拥有指定子ID列表的父ID
原SQL错误原因
你写的SQL存在两个核心问题:
CHILD_ID IN (217, 218)放在HAVING子句中逻辑无效:GROUP BY Parent_Id之后,Child_Id不再是单个值,这个条件只会检查分组内是否存在符合的子ID,而非所有子ID都属于指定列表。- 未排除包含指定列表外子ID的父ID:比如Parent_Id=228的子ID包含225(不在指定列表),但原SQL仅通过
count(DISTINCT CHILD_ID)=2判断,无法识别这类情况。
正确SQL写法
写法一:使用聚合函数过滤非指定子ID
SELECT Parent_Id FROM Parent_Child GROUP BY Parent_Id HAVING COUNT(DISTINCT Child_Id) = 2 -- 子ID数量与指定列表长度一致 AND SUM(CASE WHEN Child_Id NOT IN (217, 218) THEN 1 ELSE 0 END) = 0; -- 不存在指定列表外的子ID
写法二:用子查询排除含无关子ID的父ID
SELECT Parent_Id FROM Parent_Child WHERE Parent_Id NOT IN ( SELECT DISTINCT Parent_Id FROM Parent_Child WHERE Child_Id NOT IN (217, 218) ) GROUP BY Parent_Id HAVING COUNT(DISTINCT Child_Id) = 2;
这两种写法都能准确筛选出仅拥有217、218这两个子ID的父ID(即219)。
内容的提问来源于stack exchange,提问作者AKR040322
相关产品推荐
相关产品推荐

