首页 > 解决方案 > 如何遍历一个表并在 MySQL 中抓取一行?

问题描述

我想要完成的是循环遍历表的所有行并一次抓取一行并对其进行处理。像这样的东西

BEGIN
    DECLARE x INT;
    DECLARE countmax INT; 
    DECLARE id INT;
    DECLARE name VARCHAR(255);
    SET x = 1;
    SET id = 0;
    SET countmax = (select count(*) from Appian.APPIAN_DATA);
    SET FOREIGN_KEY_CHECKS = 0;

    WHILE x < countmax DO
        SET name = (SELECT FULL_NAME
                    FROM Appian.APPIAN_DATA 
                    WHERE ID = x
                    );
        #do something with above result here later.
        SET x = x + 1;

    END WHILE;
    select name;

END

从上面看,name 返回 null。我检查了 x 是否正确递增,似乎没问题。我想抓住 ID = x 的行。第一次在 SQL 中使用循环,所以不确定什么是允许的,什么是不允许的。但是,我还没有看到人们在循环中使用选择,主要是操作数据和更新行。最终目标是创建临时表并在操作后将每一行插入其中。对于专家来说,我在这里做了什么愚蠢的事情,我不能从表中提取数据并将其分配给变量?编辑:更新代码更清晰

标签: mysqlsqlwhile-loop

解决方案


发布的代码只会查看 ID = 379 ,我假设您打算使用“WHERE ID = x”。

此外,您通常无需使用循环即可完成您想要的工作,但如果您坚持迭代编程,请考虑改为学习游标。它将使用更简单的语法为您处理 while 循环中的一些小细节。

https://dev.mysql.com/doc/refman/8.0/en/cursors.html


推荐阅读