首先有这个一个数据库:/*
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.7.22 
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;create table `temptable1` (
`ID` int (11),
`Name` varchar (96),
`LevelID` int (11),
`LevelName` varchar (96)
); 
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('1','zzw','0','青铜');
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('2','zll','0','白金');
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('3','zdc','0','黄金');
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('4','lqy','0','青铜');
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('5','zyy','0','白银');
insert into `temptable1` (`ID`, `Name`, `LevelID`, `LevelName`) values('6','zhy','0','');我对其中的LevelName进行了去重查询:SELECT DISTINCT LevelName FROM temptable1
WHERE LevelName <> ""得到结果:create table `temptable1` (
`LevelName` varchar (96)
); 
insert into `temptable1` (`LevelName`) values('青铜');
insert into `temptable1` (`LevelName`) values('白金');
insert into `temptable1` (`LevelName`) values('黄金');
insert into `temptable1` (`LevelName`) values('白银');然后,我想要将这个结果,插入另一个表中:CREATE TABLE `tempzzw`.`level_tb`(  
  `ID` INT(11) NOT NULL,
  `Name` VARCHAR(32) NOT NULL DEFAULT '',
  PRIMARY KEY (`ID`)
);保存的过程,我百度到,可以用存储过程,for循环写入。
可是,问题就在于,这个循环写入的过程怎么写。
类似C#中,可以用foreach(var item in list)
{
    var row = new Level
    { 
          Name = item.LevelName,
    }
    leveltb.Add(row);
}这个是伪代码,C#中大概是这么写的。
可是MySql中,存储过程应该怎么写?

解决方案 »

  1.   


    这个是原始表,最开始的数据是放在这里面的。但这个结果,目前只能用来看,
    如果写入到另一个表中。
    另一个表的结构是这样的,ID是自增的,只要将Name写进去:
    ]
    现在问题就在于,不知道怎么写入,
    百度上找到存储过程,都是类似这样的:DELIMITER $$ 
    DROP PROCEDURE IF EXISTS insertMsg $$ 
    CREATE 
        PROCEDURE `o2osysdb`.`insertMsg`() 
        BEGIN 
            DECLARE var INT;  
            DECLARE msg,var1 CHAR(10);/*设置char时,没设置长度会默认为1*/ 
            SET var=0;  
            WHILE var<1 DO  
            INSERT INTO `CODE` (MSG_CODE,STATUS) VALUES (var,5); 
            SET var=var+1;  
            END WHILE; 
        END$$ 
    DELIMITER ; 这里面有个问题,那就是类似var的数据,都是有规律可以自增、自减、自己组合的。
    可是,如果是
    SELECT DISTINCT LevelName FROM temptable1
    WHERE LevelName <> ""
    查找出的结果,
    sql中有没有类似foreach的语法,来分别获取结果中的每一个值?我循环插入?
    或者有没有类似下标的语法,将查询结果的值取出来,如果可以,我也能做for循环,取出每一个结果去插入。
      

  2.   

    找到办法了。是从帖子低下推荐问题里面找到的,感谢:mysql 从一个表中查询若干条数据重新插入到一个新表 已经存在的不再重复插入,这个帖子解决代码是:INSERT INTO level_tb (NAME)
    (SELECT DISTINCT LevelName FROM temptable1 WHERE LevelName <> "");