mySql字段内容去重

mySql字段内容去重

字段存放例如 “112,123,112,113” 这样得数据,通过sql查询变成“112,123,113”去重后得数据。

例如name字段数据:
在这里插入图片描述

结果:
在这里插入图片描述

1.第一步将多个名字进行拆分拆分成多个名字

SELECT a.id
    , substring_index(substring_index(需要拆分的字符串, 需要拆分的符号, b.help_topic_id + 1), 需要拆分符号, - 1) AS name
FROM 表名 a
INNER JOIN mysql.help_topic b
    ON b.help_topic_id < (length(需要拆分的字符串) - length(REPLACE(需要拆分的字符串, 需要拆分符号, '')) + 1)

在这里插入图片描述

2.再根据id分组,通过GROUP_CONCAT()聚合在一块,在GROUP_CONCAT()里面嵌套一个DISTINCT()去重函数,达到去重得效果。

SELECT a.id
    , GROUP_CONCAT(DISTINCT(substring_index(substring_index(需要拆分的字符串, 需要拆分的符号, b.help_topic_id + 1), 需要拆分符号, - 1))) AS name
FROM 表名 a
INNER JOIN mysql.help_topic b
    ON b.help_topic_id < (length(需要拆分的字符串) - length(REPLACE(需要拆分的字符串, 需要拆分符号, '')) + 1)
    GROUP BY a.id

效果图如下:
在这里插入图片描述

所用到函数:

SUBSTRING_INDEX (str, delim, count)
str: 需要分割的字符串
delim: 分割字符串的符号或字符
count: 分割(输入正整数表示获得从左到右的第几个关键字的左边内容,负整数为从右到左的右面内容)


GROUP_CONCAT([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq]);
是将分组中括号里对应的字符串进行连接.如果分组中括号里的参数有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。
column1: 将分组中column1这一列对应的多行的值按照
column2: 升序或者降序进行连接
seq:分隔符
# 如果没有指定SEPARATOR的话,默认以 ','分隔


distinct(查询字段)
distinct(查询字段),必须放在要查询字段的开头,即放在第一个参数;
只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
不能与all同时使用,默认情况下,查询时返回的就是所有的结果
的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
不能与all同时使用,默认情况下,查询时返回的就是所有的结果
  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值