Mysql循环和插入

时间:2012-09-27 18:20:10

标签: mysql

我有以下MySql脚本:

SET @skip = 0;
SET @max = (SELECT COUNT(*) FROM table1);

CREATE TEMPORARY TABLE TempTable(
   id INT NOT NULL,
   name VARCHAR(32) NOT NULL
);

loop1: LOOP
  INSERT INTO TempTable (id, name) SELECT id, name FROM table1 LIMIT @skip, 1;

  IF @skip < @max THEN
    SET @skip = @skip + 1;
    ITERATE loop1;
  END IF;
  LEAVE loop1;
END LOOP loop1;

SELECT * FROM TempTable;

此脚本不起作用,但应选择table1中的所有ID和名称。我正在使用一个循环,因为我也会在这些循环中做其他的东西,但这是为了以后。 我不是在寻找像SELECT id, name FROM table1这样的解决方案,但我想修复我的错误。所以我可以继续我的循环。

我得到的错误是:

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   'loop1附近:LOOP INSERT INTO TempTable(id,name)SELECT id,name   FROM table1'在第1行

3 个答案:

答案 0 :(得分:6)

尝试这样的循环语法:

DECLARE @count INT;
DECLARE @max INT;
SET @count=1;
SET @max= (SELECT COUNT(*) FROM table1);
WHILE(@count < @max)
BEGIN
    /*your database query logic*/
END

使用“SET @count =(@ count + 1)”在循环中增加计数器

答案 1 :(得分:5)

/* set delimiter */
DELIMITER $$

/* remove procedure if exists... */
DROP PROCEDURE IF EXISTS insert_it $$

/* create procedure */ 
CREATE PROCEDURE insert_it ()
BEGIN
DECLARE varcount INT DEFAULT 1;
DECLARE varmax INT DEFAULT 15;

WHILE varcount <= varmax DO
    INSERT INTO yourtable(fixed_val, count_val) VALUES(3493, varcount);
    SET varcount = varcount + 1;
END WHILE;

END $$

/* reset delimiter back to normal */
DELIMITER ;

/* call procedure */ 
CALL insert_it();

答案 2 :(得分:2)

你的代码中有 语法错误(LIMIT @skip是动态SQL,需要一些技巧才能使其正常工作)但它不在loop1: LOOP。< / p>

我的猜测是你试图在复合语句(BEGIN ... END)之外使用LOOP,就像存储过程一样,这是不可能的。您必须创建一个存储过程来执行此操作。