如何去除数据库同一行字段内的重复值?
解决字段内逗号分隔值的去重问题
你的原SQL是用于识别整行重复的记录(即多条行的columna值完全相同的情况),但你的需求是对单个字段内部的重复子值去重,所以这个方法不适用。
以下是不同主流数据库下的实现方案:
- PostgreSQL 实现
利用string_to_array拆分字符串,unnest转为行,DISTINCT去重后用string_agg重新拼接:
SELECT string_agg(DISTINCT elem, ',') AS columna FROM tablea, unnest(string_to_array(columna, ',')) AS elem;
- MySQL 8.0+ 实现
通过JSON_TABLE将字符串转为JSON数组后拆分,去重后用GROUP_CONCAT拼接:
SELECT GROUP_CONCAT(DISTINCT elem SEPARATOR ',') AS columna FROM tablea, JSON_TABLE( CONCAT('["', REPLACE(columna, ',', '","'), '"]'), '$[*]' COLUMNS (elem VARCHAR(255) PATH '$') ) AS jt;
- SQL Server 实现
用STRING_SPLIT拆分字符串,DISTINCT去重后通过STRING_AGG拼接:
SELECT STRING_AGG(DISTINCT value, ',') AS columna FROM tablea CROSS APPLY STRING_SPLIT(columna, ',');
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

