[英]How to turn a single row to multiple row in mysql?
前任:
“流派”列有一行数据:
+----------------------------+
| genres |
+----------------------------+
| action, adventure, drama | |
| |
+----------------------------+
我想要的 output 将是一个包含以下数据的列:
+------------+
| genre |
+------------+
| action |
| adventure |
| drama |
+------------+
我如何在 mysql 中进行操作?
您可以尝试创建一个拆分 function 如下所示,以通过逗号获取您期望值的一部分。
架构 (MySQL v5.7)
DELIMITER $$
DROP FUNCTION IF EXISTS `SPLIT_STR` $$
CREATE FUNCTION `SPLIT_STR`(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
) RETURNS varchar(255) CHARSET latin1
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '') $$
DELIMITER ;
然后使用UNION ALL
将这些结果组合起来,如下所示
查询#1
SELECT SPLIT_STR(genres, ',', 1) genre FROM T
UNION ALL
SELECT SPLIT_STR(genres, ',', 2) FROM T
UNION ALL
SELECT SPLIT_STR(genres, ',', 3) FROM T;
类型 |
---|
行动 |
冒险 |
戏剧 |
笔记
我建议你重新设计你的表方案,因为它不利于逗号存储值,你需要转换为行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.