MySQL 如何在MySQL中将重复值组合成一个,对应值以连字符分隔?

MySQL 如何在MySQL中将重复值组合成一个,对应值以连字符分隔?

阅读更多:MySQL 教程

问题描述

在MySQL中,我们有时会遇到需要将重复的值合并起来的情况。比如说,我们需要合并某张表中的某一列的重复值,并以连字符(-)分隔。例如,有以下表:

CREATE TABLE mytable (
  id INT,
  name VARCHAR(20)
);

INSERT INTO mytable VALUES
  (1, '张三'),
  (2, '李四'),
  (3, '王五'),
  (4, '张三'),
  (5, '李四');

我们需要将重复的姓名进行合并,且以连字符分隔,最终的结果应该为:

id  name
1   张三
2   李四
3   王五
4   张三-张三
5   李四-李四

那么,该如何实现这一需求呢?

解决方法

我们需要使用MySQL提供的一些函数,例如GROUP_CONCAT()DISTINCT等。

方法一:使用GROUP_CONCAT()函数

GROUP_CONCAT()函数用于将分组结果进行串联。我们可以将表按照姓名进行分组,然后使用GROUP_CONCAT()函数将同一组中的姓名进行串联。

下面是实现代码:

SELECT GROUP_CONCAT(name SEPARATOR '-')
FROM mytable
GROUP BY name;

结果如下:

GROUP_CONCAT(name SEPARATOR '-')
张三
李四
王五
张三-张三
李四-李四

但是,这样的结果并不是我们需要的,因为它只返回了姓名,没有返回对应的id。如果要保留id,我们可以通过子查询的方式实现:

SELECT id, (
    SELECT GROUP_CONCAT(name SEPARATOR '-')
    FROM mytable
    WHERE name = t.name
  ) name
FROM (
  SELECT DISTINCT name
  FROM mytable
) t INNER JOIN mytable ON t.name = mytable.name
ORDER BY id;

结果如下:

id  name
1   张三
2   李四
3   王五
4   张三-张三
5   李四-李四

方法二:使用内置函数GROUP_CONCAT()DISTINCT函数

我们也可以在GROUP_CONCAT()函数中使用DISTINCT来去重,这样就可以得到我们需要的结果。

SELECT id, GROUP_CONCAT(DISTINCT name SEPARATOR '-')
FROM mytable
GROUP BY id;

结果如下:

id  name
1   张三
2   李四
3   王五
4   张三-张三
5   李四-李四

结论

通过以上两种方法,我们可以在MySQL中将重复值组合成一个,对应值以连字符分隔。在实际开发中,我们可以根据具体情况选择使用哪种方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程