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

MySQL查询需求:父子行customer_id全同时返回值否则为NULL

需求说明

现有数据表包含id、parent_id、customer_id三列,需查询所有parent_id为0的父行,规则如下:

  • 若父行的customer_id与它的所有子行customer_id完全一致,返回该customer_id值
  • 若存在不一致的情况,返回NULL(或0)

输入数据示例

描述idparent_idcustomer_id
这是一条父行10101
这是id为1的行的子行21101
这是id为1的行的子行31101
这是一条父行40103
这是id为4的行的子行54104
这是id为4的行的子行64104
这是一条父行70101
这是id为7的行的子行87104
这是id为7的行的子行97101

期望查询结果

idcustomer_id
1101
4NULL
7NULL

解决方案

这里提供通用SQL实现,通过分组聚合结合条件判断完成需求:

SELECT 
    p.id,
    CASE 
        WHEN COUNT(DISTINCT c.customer_id) = 1 AND MAX(c.customer_id) = p.customer_id 
        THEN p.customer_id
        ELSE NULL -- 需要返回0的话替换为ELSE 0即可
    END AS customer_id
FROM 
    your_table p
LEFT JOIN 
    your_table c ON p.id = c.parent_id
WHERE 
    p.parent_id = 0
GROUP BY 
    p.id, p.customer_id;

逻辑说明

  1. 关联父子行:用LEFT JOIN将父行(parent_id=0)与对应的所有子行关联,确保无子女的父行也能被查询到
  2. 分组聚合:按父行的id和customer_id分组,统计子行中不同customer_id的数量
  3. 条件判断:
    • 若子行的customer_id只有唯一值,且与父行的customer_id完全匹配,返回父行的customer_id
    • 只要子行存在与父行不一致的customer_id,或子行有多种customer_id,就返回NULL(或0)

内容的提问来源于stack exchange,提问作者Łukasz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:23