mysql 列逗号拆开_mysql – 将逗号分隔的列值拆分(爆炸)到行

更新您可以像这样使用SQL

INSERT INTO branch_table (id, branch_id)

SELECT e.id, SUBSTRING_INDEX(SUBSTRING_INDEX(e.branch_ids, ',', n.n), ',', -1) branch_id

FROM eligibility_table e CROSS JOIN

(

SELECT a.N + b.N * 10 + 1 n

FROM

(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a

,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b

ORDER BY n

) n

WHERE n.n <= 1 + (LENGTH(e.branch_ids) - LENGTH(REPLACE(e.branch_ids, ',', '')))

ORDER BY id, branch_id

>在使用UNION ALL和CROSS JOIN的特定情况下,别名为n的子查询动态生成1到100的数字序列(数字或计数表).有时在数据库中有一个真正的计数表很方便.

>在外部选择最里面的SUBSTRING_INDEX()获取列表中第n个元素的所有内容,外部SUBSTRING_INDEX()提取最后一个分隔符后有效获得第n个元素本身的最右边部分.

> CROSS JOIN允许我们生成一组行,这是一个笛卡尔积(n中有100行,eligibility_table中有所有行)

WHERE子句中的条件过滤掉结果集中的所有不必要的行

注意:此查询最多可拆分100个分支ID.如果您需要更多或更少,可以通过编辑内部子查询来调整限制

结果在branch_table中:

| ID | BRANCH_ID |

------------------

| 1 | 621 |

| 1 | 622 |

| 1 | 623 |

| 1 | 625 |

| 2 | 621 |

| 2 | 650 |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值