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

求助:如何将KnownForTitles列按逗号拆分为4列?SQL语句调试

问题排查与修正方案

原SQL的核心问题

  • 重复调用group_concat:多次执行group_concat(Titleid order by nameID)会降低查询效率,且可能因执行上下文导致结果不一致。
  • substring + instr逻辑错误:你写的表达式会把逗号包含进结果,且无法正确定位第二个元素的起始位置,导致拆分结果不符合预期。

修正后的SQL语句

SELECT 
    nameID, 
    name, 
    SUBSTRING_INDEX(concatenated_titles, ',', 1) AS KnownForTitles1,
    SUBSTRING_INDEX(SUBSTRING_INDEX(concatenated_titles, ',', 2), ',', -1) AS KnownForTitles2,
    SUBSTRING_INDEX(SUBSTRING_INDEX(concatenated_titles, ',', 3), ',', -1) AS KnownForTitles3,
    SUBSTRING_INDEX(SUBSTRING_INDEX(concatenated_titles, ',', 4), ',', -1) AS KnownForTitles4
FROM (
    SELECT 
        p.nameID, 
        p.name, 
        GROUP_CONCAT(kft.Titleid ORDER BY p.nameID) AS concatenated_titles
    FROM Person p
    INNER JOIN KnownForTitles kft USING (nameid)
    INNER JOIN Media m USING (titleID)
    GROUP BY p.nameID, p.name
) AS temp
ORDER BY nameID;

关键修正说明

  1. 预聚合拼接字符串:通过子查询预先将每个nameID对应的所有Titleid拼接成一个字符串,避免重复计算,提升效率。
  2. 正确的拆分逻辑:利用SUBSTRING_INDEX的负索引特性,先截取前N个元素,再取最后一个元素,精准提取第N个Titleid。
  3. 规范分组字段:分组时同时包含nameID和name,避免因SQL模式(如ONLY_FULL_GROUP_BY)导致的语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:20:29