Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql一行拆分成多行

作者:殘月殺手   发布日期:2026-08-05   浏览:75

-- 示例表结构
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;

解释说明:

  1. 创建表和插入数据

    • 创建一个名为 example 的表,包含一个自增的 id 和一个存储逗号分隔值的 data 字段。
    • 插入几条示例数据,每条记录中 data 字段包含多个用逗号分隔的值。
  2. 递归CTE (split_data)

    • 基础部分:从原始表中提取每一行的第一个值,并将剩余的部分存储在 remaining 列中。
    • 递归部分:继续处理 remaining 列中的值,直到没有更多的值为止。
  3. 最终查询

    • 从递归CTE中选择 idvalue,并将结果按 id 排序。

这个查询可以将一行中的多个逗号分隔的值拆分成多行。

上一篇:mysql新增用户和权限

下一篇:mysql 增加唯一索引

大家都在看

mysql二级索引

mysqlavg函数保留小数

mysql显示表内容

mysql收集表统计信息

mysql经纬度距离计算

mysql 加密

mysql大小写转换函数

存储过程mysql

mysql 1265

mysql with语句

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站