You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.7中如何根据子ID列表查询精确匹配的父ID

问题解决:查询仅拥有指定子ID列表的父ID

原SQL错误原因

你写的SQL存在两个核心问题:

  1. CHILD_ID IN (217, 218)放在HAVING子句中逻辑无效:GROUP BY Parent_Id之后,Child_Id不再是单个值,这个条件只会检查分组内是否存在符合的子ID,而非所有子ID都属于指定列表。
  2. 未排除包含指定列表外子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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:22:46