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
相关产品推荐
相关产品推荐

