首页 > 解决方案 > 错误 1064:无法在 mysql 中使用变量执行 while 循环

问题描述

我想运行以下查询以循环插入表中:

SET @maxid =  ( select max( length( id ) ) from article ) ;
SET @x=1;
WHILE @x<= @maxid DO
 INSERT INTO `article_responder` 
   (article_id, username, reply_id)
   SELECT @x, p.username, p.id
   FROM article AS a, post AS p
   WHERE a.id=@x AND p.article_id=@x ;
 SET  @x = @x + 1; 
 END WHILE;

但我得到这个错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END WHILE' at line 

注意article_id不能自动递增,因为业务loginc要求插入数据后,下一行article_responder 可以是任何文章。所以我不知道如何填充 article_responder通常的连接。

我该如何解决?

标签: mysqlwhile-loop

解决方案


我建议只制作article_id一个主键自动递增列,然后执行以下操作INSERT INTO ... SELECT

INSERT INTO article_responder (username, reply_id)
SELECT p.username, p.id
FROM post p
INNER JOIN article a
    ON a.id = p.article_id;

请注意,逻辑WHERE a.id=@x AND p.article_id=@x等价于这样说a.id = p.article_id


推荐阅读