首先有这个一个数据库:/*
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中,存储过程应该怎么写?
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中,存储过程应该怎么写?
这个是原始表,最开始的数据是放在这里面的。但这个结果,目前只能用来看,
如果写入到另一个表中。
另一个表的结构是这样的,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循环,取出每一个结果去插入。
(SELECT DISTINCT LevelName FROM temptable1 WHERE LevelName <> "");