问题: 我有一个 MySQL 存储过程,我想在每次调用该过程时将用户变量重置为 0,但该变量似乎在每次运行时都记住了它的值,我无法将其初始化为零。
详细信息:我有一个数据表(称为),我从中读取数据表,然后在另一个表(称为)data
中以一对一的关联生成记录。results
我在使用 Insert Select 语句的存储过程中执行此操作。我还使用了一个@mycount
随每一行递增的用户变量。这是我的代码的简化版本:
DELIMITER //
CREATE PROCEDURE doSomething
BEGIN
SET @mycount := 0;
INSERT INTO results (data_id, mycounter)
SELECT data.id, (@mycount := @mycount+1)
FROM data LEFT JOIN results ON data.id = results.data_id
WHERE ... GROUP BY ...
HAVING ...
ORDER BY ...;
END //
DELIMITER ;
分析:这几乎可以按预期工作,除非我@mycount
每次运行时都需要将其重置为零并且SET
上面的语句没有实现这一点。调试时,我可以看到最后一个值@mycount
总是从存储过程的上一次运行中记住的。我也尝试在插入后将其设置为零。
笔记:
- 我正在使用一个
@
变量来增加和跟踪行号。也许这里还有另一种选择? - 这个问题似乎与 Have 子句有关。当我运行一个类似但不同的查询时,没有使用 having 子句,变量重置没有问题。
问题:@mycount
为什么每次运行前不能设置为零?如果它正在重置并且只是我的Having 子句导致意外计数,是否有更好的方法来重写我的SQL?
我希望有人遇到过类似的事情,因为这看起来很模糊。