[英]Split mysql column into multiple rows
我在 mysql 數據庫中有以下結構:
EMAIL PERMISSIONS
a@b {app1: perm1; perm2; perm3};{app2: perm4; perm5; perm6}
我想使用一個查詢,它將以以下格式返回 3 列中的數據:
a@b app1 perm1
a@b app1 perm2
a@b app1 perm3
a@b app2 perm4
a@b app2 perm5
a@b app2 perm6
每個應用程序可以有 3 個以上的權限。
謝謝
架構 (MySQL v8.0)
CREATE TABLE my_bad_data
(email VARCHAR(12) NOT NULL
,permissions VARCHAR(250) NOT NULL
);
INSERT INTO my_bad_data VALUES
('a@b','{app1: perm1; perm2; perm3};{app2: perm4; perm5; perm6}');
查詢#1
WITH RECURSIVE cte (n) AS
(
SELECT 1
UNION ALL
SELECT n + 1 FROM cte WHERE n < 50
)
SELECT DISTINCT
a.email
, a.app
, SUBSTRING_INDEX(SUBSTRING_INDEX(a.perms,';',n),';',-1) perm
FROM
( SELECT DISTINCT
email
, SUBSTRING_INDEX(REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(permissions,'};{',n),'};{',-1),'{',''),'}',''),':',1)app
, SUBSTRING_INDEX(REPLACE(REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(permissions,'};{',n),'};{',-1),'{',''),'}',''),':',-1)perms
FROM my_bad_data
, cte
) a
JOIN cte;
電子郵件 | 應用程序 | 燙發 |
---|---|---|
一個@b | 應用程序1 | 燙發1 |
一個@b | 應用程序2 | 燙發4 |
一個@b | 應用程序1 | 燙2 |
一個@b | 應用程序2 | 燙發5 |
一個@b | 應用程序1 | perm3 |
一個@b | 應用程序2 | 燙發6 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.