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

MySQL中检查同一单元格重复数据:customer_mobile列查询需求

检测逗号分隔手机号列中的重复值

嘿,这个需求我熟!要判断customer_mobile列里的逗号分隔手机号是否存在重复,核心思路就是把字符串拆分成单独的手机号条目,对比原始的总数量和去重后的数量——如果两者不一样,就说明有重复数据,返回1,否则返回0。

下面针对主流数据库给出具体的实现方案:

MySQL 8.0+ 版本

利用JSON_TABLE来拆分字符串,再通过分组统计判断重复:

SELECT 
    customer_mobile,
    CASE 
        WHEN COUNT(*) <> COUNT(DISTINCT mobile) THEN 1 
        ELSE 0 
    END AS has_duplicate
FROM your_table,
     JSON_TABLE(
         CONCAT('["', REPLACE(customer_mobile, ',', '","'), '"]'),
         '$[*]' COLUMNS (mobile VARCHAR(20) PATH '$')
     ) AS split_mobiles
GROUP BY customer_mobile;

解释:

  • 先把逗号分隔的字符串转换成JSON数组格式,再用JSON_TABLE拆分成独立行
  • 分组后对比总条数和去重后的条数,不等就标记为1

PostgreSQL 版本

用string_to_array和unnest拆分字符串,再统计判断:

SELECT 
    customer_mobile,
    CASE 
        WHEN COUNT(*) <> COUNT(DISTINCT mobile) THEN 1 
        ELSE 0 
    END AS has_duplicate
FROM your_table,
     unnest(string_to_array(customer_mobile, ',')) AS mobile
GROUP BY customer_mobile;

解释:

  • string_to_array把字符串转成数组,unnest把数组拆成多行
  • 同样通过计数对比来检测重复

SQL Server 版本

使用STRING_SPLIT函数拆分:

SELECT 
    customer_mobile,
    CASE 
        WHEN COUNT(*) <> COUNT(DISTINCT value) THEN 1 
        ELSE 0 
    END AS has_duplicate
FROM your_table
CROSS APPLY STRING_SPLIT(customer_mobile, ',')
GROUP BY customer_mobile;

解释:

  • STRING_SPLIT直接拆分逗号分隔的字符串为多行
  • 分组后计数对比,判断是否有重复

如果你的数据库版本比较旧(比如MySQL 5.x),可以用递归CTE的方式来拆分字符串,写法会稍微复杂一点,需要的话可以再细化讨论!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:44