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

如何根据非后缀带'-'的location对应的cp_id填充root_cp_id列

解决方案:填充root_cp_id字段的SQL实现

根据需求和示例数据,我们可以通过自连接+字符串截取+COALESCE函数实现root_cp_id的填充,核心逻辑如下:

  • 提取每个location的根前缀:用SUBSTRING_INDEX(location, '-', 1)截取-之前的部分(无-则返回原location);
  • 优先匹配表中location等于该根前缀的行的cp_id;
  • 若找不到匹配的location,则匹配cp_id等于该根前缀的行的cp_id;
  • 兜底返回当前行的cp_id(避免无匹配的异常情况)。

示例数据表

假设表名为cp_table,原始数据如下:

cp_idlocation
1998180
2294180-1
2000220
21502000
2001240
2139240-1
2157120
2164120-1
2244120-2
2227130

实现SQL

SELECT 
    t.cp_id,
    COALESCE(loc_root.cp_id, cp_root.cp_id, t.cp_id) AS root_cp_id,
    t.location
FROM cp_table t
-- 连接匹配根前缀location的行
LEFT JOIN cp_table loc_root 
    ON loc_root.location = SUBSTRING_INDEX(t.location, '-', 1)
-- 连接匹配根前缀cp_id的行
LEFT JOIN cp_table cp_root 
    ON cp_root.cp_id = SUBSTRING_INDEX(t.location, '-', 1)
ORDER BY t.cp_id;

执行结果

运行上述SQL后,将得到期望的结果:

cp_idroot_cp_idlocation
19981998180
22941998180-1
20002000220
215020002000
20012001240
21392001240-1
21572157120
21642157120-1
22442157120-2
22272227130

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:43