在 SQL 过程中执行 while,以 i 为限

问题描述

我遇到了一个带有此代码的过程

DELIMITER $$
Create PROCEDURE Procedure1 (IN A int)  
BEGIN   
DECLARE n int DEFAULT 0;
  DECLARE i int DEFAULT 0;
  DECLARE column_int int DEFAULT NULL;

  SELECT
    COUNT(1)
  FROM table1 t1
  WHERE t1.id = A INTO n;

  WHILE i < n DO
    SELECT
      t1.B
    FROM table1 t1
    WHERE t1.id = A
    ORDER BY t1.id
    LIMIT i,1 INTO column_int;

    CALL Procedure2(A,column_int);

    SET i = i + 1;
  END WHILE;
END
$$
DELIMITER;

我不明白代码的 while 部分,如果我们被 i 限制,第一次运行不应该给出任何记录(因为 i 将是 0),并且因为 n 将是 1(从第一部分查询 count(1) 在 n 中插入的位置) i

解决方法

i 用于设置偏移量,因此它一次遍历 table1 1 行,直到 i 达到表中的行数。

limit 的完整形式是 limit offset,number