mysql - 错误 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
通常的连接。
我该如何解决?
解决方案
我建议只制作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
。
推荐阅读
- r - 使用R在plolty中将悬停文本添加到箱线图
- node.js - 使用 2019 年巴西夏令时的节点
- php - xpath php 7 与 php 5.6
- c - 如何将值分配给双指针数组,该数组是 c 中结构的成员,当它传递给其他函数时
- java - Anylogic microsoft sql error The index 1 is out of range
- java - 用于云 kubernetes 的 Spring Cloud Config Server 与 ConfigMaps
- javascript - 创建工作表时在 Sheetjs 中设置日期格式
- ios - 在 UIScrollView 中单击按钮时将 UITextFields 添加到另一个下方
- mysql - 如何将 mysql 查询“按语句分组”结果转换为 json 结构?
- python - Python / Netmiko:在切换日志中查找故障