首页 > 数据库 > mysql教程 > 如何反转 MySQL 的 GROUP_CONCAT:将连接的字符串拆分为单独的值?

如何反转 MySQL 的 GROUP_CONCAT:将连接的字符串拆分为单独的值?

Barbara Streisand
发布: 2024-12-16 22:05:14
原创
533 人浏览过

How to Reverse MySQL's GROUP_CONCAT: Splitting a Concatenated String into Individual Values?

解开 MySQL 中 GROUP_CONCAT 逆运算的谜团

在数据操作领域,GROUP_CONCAT 函数在将多个值连接成一个值方面占据着统治地位。单字符串。然而,将连接的字符串拆分为单个值的逆操作提出了挑战。

手头的问题

考虑一个场景,其中您有一个表“颜色” “数据结构如下:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
登录后复制

您的目标是将这些数据转换为更细粒度的数据格式:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
登录后复制

解决方案:深入 SQL

要实现这种数据变形,您可以利用 SUBSTRING_INDEX 函数的强大功能。这个多功能函数允许您根据分隔符提取特定的子字符串。

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM
  colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit
登录后复制

揭示查询背后的机制

外部查询选择“id”列并使用两次嵌套的 SUBSTRING_INDEX 函数来隔离所需的子字符串。第一次调用 SUBSTRING_INDEX 提取第 (n.digit 1) 个逗号之前的子字符串,而第二次调用则提取第 (n.digit 1) 个逗号之后到字符串末尾的子字符串。

带有子查询的 INNER JOIN 确保 SUBSTRING_INDEX 函数应用于最多 4 个子字符串,如中的“digit”列所定义子查询。要支持更多子字符串,请相应地调整子查询。

最后,ORDER BY 子句按“id”对结果进行排序,然后按每行的子字符串的数字顺序对结果进行排序。

演示和制作人员

有关实际演示,请访问参考中链接的小提琴提供。

参考文献

[从逗号分隔列表中提取多个值](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)

以上是如何反转 MySQL 的 GROUP_CONCAT:将连接的字符串拆分为单独的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板