mysql中将一行数据根据条件分拆多行
以下用法只支持mysql8.0以上;
遇到了个数据结构,字符串用逗号隔开的,需要分拆后统计数据,用到了mysql8的一个JSON_TABLE用法
CREATE TABLE items ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), tags VARCHAR(255) ); INSERT INTO items (name, tags) VALUES ('Item1', 'tag1,tag2,tag3'); INSERT INTO items (name, tags) VALUES ('Item2', 'tag4,tag5');
SELECT i.id, i.name, jt.tag FROM items i, JSON_TABLE( CONCAT('["', REPLACE(i.tags, ',', '","'), '"]'), '$[*]' COLUMNS (tag VARCHAR(255) PATH '$') ) jt ORDER BY i.id, jt.tag;
输出结构如下:
+----+-------+------+
| id | name | tag |
+----+-------+------+
| 1 | Item1 | tag1 |
| 1 | Item1 | tag2 |
| 1 | Item1 | tag3 |
| 2 | Item2 | tag4 |
| 2 | Item2 | tag5 |
+----+-------+------+