[英]How to turn a single row to multiple row in mysql?
ex:前任:
the column 'genre' has a row of data: “流派”列有一行数据:
+----------------------------+
| genres |
+----------------------------+
| action, adventure, drama | |
| |
+----------------------------+
my desired output will be a column that holds the following data:我想要的 output 将是一个包含以下数据的列:
+------------+
| genre |
+------------+
| action |
| adventure |
| drama |
+------------+
how do I do it in mysql?我如何在 mysql 中进行操作?
You can try to create a split function as below to get your expectation part of values by comma.您可以尝试创建一个拆分 function 如下所示,以通过逗号获取您期望值的一部分。
Schema (MySQL v5.7)架构 (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 ;
then use UNION ALL
to combine those result as below然后使用UNION ALL
将这些结果组合起来,如下所示
Query #1查询#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;
genre类型 |
---|
action行动 |
adventure冒险 |
drama戏剧 |
View on DB Fiddle在 DB Fiddle 上查看
NOTE笔记
I would suggest you re-design your table scheme because it was bad for store value by comma and you need to convert as rows.我建议你重新设计你的表方案,因为它不利于逗号存储值,你需要转换为行。
first, to show all content of your table, u can use * (it's mean all)首先,要显示表格的所有内容,您可以使用 * (这意味着全部)
SELECT * FROM <TableName>;
for spesific column u can change it to column name,对于特定列,您可以将其更改为列名,
SELECT <ColumnName> FROM <TableName>;
Ex: in my case i want show just content of name.例如:在我的例子中,我只想显示名称的内容。 so i can write所以我可以写
SELECT name FROM users;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.