MYSQL命令怎么实现将表中某个字段中多个记录拆分,急求答案!

比如原数据如图,我想将第二个字段中有逗号分隔的多个值分别拆成一行

拆开后成这样的记录

哪位大侠帮帮忙,不胜感激……

觉得你还是应该用php去写。非要用mysql本身的话给个参考:


mysql> select * from a;
+------+--------+------+----+
| id   | name   | num1 | bb |
+------+--------+------+----+
|    1 | a,     |    2 |  3 |
|    2 | b,c,   |    2 |  4 |
|    3 | d,e,f, |    2 |  5 |
+------+--------+------+----+
3 rows in set (0.00 sec)

mysql> delimiter //
mysql> create procedure `strsplit1`(in str3 varchar(2))
    -> begin
    ->  declare i int(10);
    ->  declare j int(10);
    ->  declare k int(10);
    ->  declare str1 varchar(100);
    ->         declare str4 varchar(1000);
    ->  declare str5 varchar(100);
    ->
    ->  select count(*) into i from a;
    ->  if i!=0 then
    ->          drop table if exists tmp_table1;
    ->          CREATE TEMPORARY TABLE tmp_table1 like a;
    ->  end if;
    ->
    ->  set j=0;
    ->  while j<i do
    ->          select id,name into str1,str4 from a limit j,1;
    ->          select instr(str4,str3) into k from dual;
    ->          if k=0 then
    ->                  insert into tmp_table1(id,name) values(str1,str4);
    ->          end if;
    ->          while k!=0 do
    ->                  select substring_index(str4,str3,1) into str5 from dual;
    ->                  insert into tmp_table1(id,name) values(str1,str5);
    ->                  select mid(str4,k+1) into str4 from dual;
    ->                  select instr(str4,str3) into k from dual;
    ->          end while;
    ->  set j=j+1;
    ->  end while;
    ->
    -> select * from tmp_table1;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql>  delimiter ;

最后结果:
mysql> call strsplit1(',');
+------+------+------+----+
| id   | name | num1 | bb |
+------+------+------+----+
|    1 | a    | NULL |  1 |
|    2 | b    | NULL |  2 |
|    2 | c    | NULL |  3 |
|    3 | d    | NULL |  4 |
|    3 | e    | NULL |  5 |
|    3 | f    | NULL |  6 |
+------+------+------+----+
6 rows in set (0.25 sec)

Query OK, 0 rows affected (0.30 sec)

追问

谢谢!php不是很熟,请问能不能帮忙写下代码呢,其中id字段是主键,序号不重复,谢谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-03
如果一定要用Mysql本身的功能,那就只能用存储过程。但我不推荐这么做。因为数据库的主要功能是存储和查询,而比较复杂的计算适合程序去做。存储过程实际上相当于自己定义mysql的函数,这也是有学习成本的。我用了几年mysql,从未用过存储过程。
所以你的问题最好用程序去实现。如果没有特殊的需求,暂时也不需要花费时间学习存储过程的语法。
用程序实现就比较简单,方法不再赘述。本回答被网友采纳

MySQL中实现分表的方法和步骤mysql中分表
1.选择分表依据 在实现分表之前,需要选择分表的依据。常见的分表依据有时间、地理位置、关键字等。根据不同的业务需求,选择合适的分表依据,能够提高分表效果。例如,对于一个电商网站,可以按照订单的日期将数据分割成不同的表。2.创建分表 在MySQL中,可以通过CREATE TABLE命令创建分表。分表的命...

MySQL删除字段轻松删除表中不需要的列mysql上删除某列
1. 查看要删除的字段名 使用DESCRIBE语句查看数据表结构,找到要删除的字段名。示例代码:DESCRIBE `table_name`;2. 删除字段 使用ALTER TABLE语句删除字段。需要指定操作的表名和要删除的字段名。示例代码:ALTER TABLE `table_name` DROP `column_name`;在执行该命令时,如果需要删除多个字段,可以用...

MySQL删除字段操作技巧mysql中删除字段里面
删除多个字段:如果要删除MySQL表中的多个字段,可以使用逗号分隔字段名称。例如,要删除名为“age”和“phone”的字段,可以使用以下命令:ALTER TABLE users DROP age, phone;重命名表:如果删除MySQL表中的一个或多个字段之后想要重命名表,可以使用RENAME语句。 例如,要将表名从“users”更改为“user...

MySQL表格合并及拆分实现上下合并的方法mysql上下合并
可以看到,我们使用UNION命令查询了表格1和表格2的合并结果,并添加了一个NULL值的列score或age,在后续的合并操作中,这些NULL值的列将被替换为实际的数值。2.使用INNER JOIN命令将NULL值的列替换为实际的数值 在上一个步骤中,我们使用了NULL值的列来实现两个表格的上下合并。现在我们需要使用INNER JO...

mysql中如何删除含有某字段的数据
首先,你需要拥有一个MySQL查询工具,无论是命令行工具还是图形界面客户端,如phpMyAdmin或MySQL Workbench。以删除名为"test"表中name字段中包含"gle"的数据为例,以下是步骤:启动你的MySQL查询器,连接到你所需的数据库,例如"test"表,它有5条数据。在查询编辑框中输入SQL命令:`DELETE FROM test ...

如何批量删除数据库里某个表里的多条记录
1、首先我们打开SQL Database Studio。2、然后我们点击展开数据库连接和数据库。3、然后我们展开已有的表。4、然后我们双击要删除记录的表,进入表数据操作界面。5、然后我们选定要删除的记录,点击【delete selected rows】。6、此时显示将删除的记录,点击【save to db】。

如何在MySQL中修改表中的字段设置mysql中修改字段
一、使用ALTER TABLE语句 ALTER TABLE语句是MySQL中用于修改表定义的命令。该命令可以用于添加、修改或删除表中的列,索引或约束等。下面是一些ALTER TABLE语句的示例:1. 添加新列:ALTER TABLE `users` ADD COLUMN `age` INT(11) NOT NULL;2. 修改列名和数据类型:ALTER TABLE `users` CHANGE ...

如何修改mysql一个数据库中所有表某个字段的数据?
ROW 模式下,即使我们只更新了一条记录的其中某个字段,也会记录每个字段变更前后的值,这个行为是 binlog_row_image 参数控制的,这个参数有 3 个值,默认为 FULL,也就是记录列的所有修改,即使字段没有发生变更也会记录。这样我们就可以实现类似 Oracle 的 flashback 的功能,我个人估计 MySQL 未来...

MySQL中Modify详解数据表字段修改技巧mysql中modify
一、修改数据表字段 在MySQL中,我们可以使用ALTER TABLE语句来修改数据表中的字段。具体语法如下:ALTER TABLE table_name MODIFY column_name column_definition;其中,table_name表示要修改的数据表的名称,column_name表示要修改的字段名称,column_definition表示字段的新定义。我们可以通过将新的定义替换旧...

一次性搞定MySQL多表修改操作教程mysql中修改多个表
1.明确需求 在进行修改操作前,需要明确我们需要对哪些表进行修改,需修改哪些字段,以及需要修改的数据内容。2.建立关联关系 如果要同时修改多个表的数据,需要在这些表之间建立关联关系。这可以通过外键关联实现。例如,我们有这样两个表:orders表 | id | user_id | goods_name | count | price | ...

相似回答