MySQL中列如何以逗號分隔轉(zhuǎn)成多行
MySQL列以逗號分隔轉(zhuǎn)成多行
業(yè)務(wù)場景:
在數(shù)據(jù)庫中,有一張的一個字段存儲方式是采用以逗號分隔存儲多個值,現(xiàn)在需要將其進行拆分成多個獨立的值,與另外一張字典表進行關(guān)聯(lián),取的最終的字典表中的 label,再以逗號拼接成顯示 label 的形式展現(xiàn)。
場景
表中存儲的值:

期待最終的展現(xiàn)效果:
甜品,休閑食品,飲料
解決方案
1. 將一列轉(zhuǎn)成多行
select v1.id,SUBSTRING_INDEX(SUBSTRING_INDEX(v1.intention_exhibits, ',', b.help_topic_id + 1), ',', - 1) AS exhibit
from test v1
JOIN mysql.help_topic AS b ON b.help_topic_id < (length(v1.intention_exhibits) -
length(REPLACE(v1.intention_exhibits, ',', '')) + 1)
where v1.id = '63591ee4f8204212837e447b34c61fef';
說明:
mysql.help_topic 表的自增id是從0開始,所以在進行截取時要對id進行+1?!鞠到y(tǒng)表,不建議使用,真正的線上環(huán)境,dba 是不允許使用系統(tǒng)表的,所以,我們需要自己創(chuàng)建一張類似的表】
創(chuàng)建一張自增表,來代替 mysql.help_topic 系統(tǒng)表,自增表的值,需要大于自己業(yè)務(wù)表中逗號拆出來的集合數(shù):
create table add_self
(
id int(20) null
);
INSERT INTO add_self (id) VALUES (0);
INSERT INTO add_self (id) VALUES (1);
INSERT INTO add_self (id) VALUES (2);
INSERT INTO add_self (id) VALUES (3);
INSERT INTO add_self (id) VALUES (4);
INSERT INTO add_self (id) VALUES (5);
INSERT INTO add_self (id) VALUES (6);
INSERT INTO add_self (id) VALUES (7);
INSERT INTO add_self (id) VALUES (8);
INSERT INTO add_self (id) VALUES (9);
INSERT INTO add_self (id) VALUES (10);2. 最終 SQL
select group_concat(edn.name)
from (
select v1.id,SUBSTRING_INDEX(SUBSTRING_INDEX(v1.intention_exhibits, ',', b.id + 1), ',', - 1) AS exhibit
from test1 v1
JOIN add_self AS b ON b.id < (length(v1.intention_exhibits) -
length(REPLACE(v1.intention_exhibits, ',', '')) + 1)
where v1.id = '63591ee4f8204212837e447b34c61fef') t
left join test2 edn on t.exhibit = edn.local_key;
使用到的相關(guān)函數(shù):
group_concatsubstring_indexlength
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解
這篇文章主要給大家介紹了關(guān)于MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2018-08-08
MySQL數(shù)據(jù)庫InnoDB引擎主從復(fù)制同步經(jīng)驗總結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)庫InnoDB引擎主從復(fù)制同步經(jīng)驗總結(jié),本文總結(jié)了設(shè)置主從復(fù)制時遇到的一些錯誤和解決方法,需要的朋友可以參考下2015-01-01
Mysql兩種情況下更新字段中部分數(shù)據(jù)的方法
Mysql更新字段中部分數(shù)據(jù)的兩種情況在下文給予詳細的解決方法,感興趣的朋友可以參考下哈2013-05-05
MySQL數(shù)據(jù),查詢QPS,TPS數(shù)據(jù)方式
文章詳細介紹了查詢MySQL數(shù)據(jù)庫QPS和TPS的方法和工具,包括直接通過命令行、PerformanceSchema、mysqladmin、Prometheus、自動化腳本等,同時,還提供了優(yōu)化建議,如索引優(yōu)化、SQL調(diào)優(yōu)、事務(wù)控制和配置調(diào)優(yōu)2025-02-02

