首先有這個一個資料庫:
/*
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中,存盤程序應該怎么寫?
問題已經解決:
INSERT INTO level_tb (NAME)
(SELECT DISTINCT LevelName FROM temptable1 WHERE LevelName <> "");
uj5u.com熱心網友回復:
這個是原始表,最開始的資料是放在這里面的。

但這個結果,目前只能用來看,
如果寫入到另一個表中。
另一個表的結構是這樣的,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回圈,取出每一個結果去插入。
uj5u.com熱心網友回復:
。。。找到辦法了。是從帖子低下推薦問題里面找到的,感謝:mysql 從一個表中查詢若干條資料重新插入到一個新表 已經存在的不再重復插入,這個帖子解決代碼是:
INSERT INTO level_tb (NAME)
(SELECT DISTINCT LevelName FROM temptable1 WHERE LevelName <> "");
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/138552.html
標籤:C#
上一篇:跪求大神指點迷津
