-- 示例表结构
CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(255)
);
-- 插入示例数据,其中包含逗号分隔的值
INSERT INTO example (data) VALUES ('A,B,C'), ('D,E'), ('F,G,H,I');
-- 使用递归CTE拆分一行中的多个值为多行
WITH RECURSIVE split_data AS (
-- 基础部分:初始化递归,从第一个字符开始
SELECT
id,
SUBSTRING_INDEX(data, ',', 1) AS value,
SUBSTRING(data, LENGTH(SUBSTRING_INDEX(data, ',', 1)) + 2) AS remaining
FROM example
UNION ALL
-- 递归部分:处理剩余的字符串
SELECT
id,
SUBSTRING_INDEX(remaining, ',', 1),
SUBSTRING(remaining, LENGTH(SUBSTRING_INDEX(remaining, ',', 1)) + 2)
FROM split_data
WHERE remaining != ''
)
SELECT id, value
FROM split_data
ORDER BY id;
创建表和插入数据:
example 的表,包含一个自增的 id 和一个存储逗号分隔值的 data 字段。data 字段包含多个用逗号分隔的值。递归CTE (split_data):
remaining 列中。remaining 列中的值,直到没有更多的值为止。最终查询:
id 和 value,并将结果按 id 排序。这个查询可以将一行中的多个逗号分隔的值拆分成多行。
上一篇:mysql新增用户和权限
下一篇:mysql 增加唯一索引
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站