为什么当我做Select count(*) From table1时,我得到300,但如果我做SELECT end = COUNT(*) FROM table1;,则返回NULL

以下是小提琴的https://dbfiddle.uk/ZHzoaztV个例子

代码片段:

CREATE TABLE table1(
  start int NOT NULL,
  id int PRIMARY KEY AUTO_INCREMENT,
  counter int NOT NULL,
  difference int NOT NULL,
  end int NOT NULL
);

CREATE PROCEDURE doWhile()
BEGIN
  DECLARE i INT DEFAULT 1;
  DECLARE start INT DEFAULT 120;
  DECLARE counter INT DEFAULT 1;
  DECLARE end INT DEFAULT 300;
WHILE (i <= end) DO
  INSERT INTO table1 VALUES (start,null,counter,start+counter,end); 
  SET i = i+1;
  SET counter = counter+1;
END WHILE;
END;
CALL doWhile();
SELECT * FROM table1;


CREATE PROCEDURE insertMore()
BEGIN
  DECLARE start INT;
  DECLARE counter INT DEFAULT 1;
  DECLARE end INT;

  SELECT end = COUNT(*) FROM table1;
  SELECT start = MAX(id)+1 FROM table1;
  -- SELECT COUNT(*) FROM table1;

  WHILE (counter <= end) DO
    INSERT INTO table1 VALUES (start,null,counter,start+counter,end); 
    SET counter = counter+1;
  END WHILE;
END;
CALL insertMore();
SELECT * FROM table1;

我希望返回300,所以希望我的函数能做对

推荐答案

您有一个关于开始和结束变量的问题

你能试试这个吗:

CREATE PROCEDURE insertMore()
BEGIN
  DECLARE start INT;
  DECLARE counter INT DEFAULT 1;
  DECLARE end INT;

  SELECT COUNT(*) into end FROM table1;
  SELECT max(id)+1 into start FROM table1;
  -- SELECT COUNT(*) FROM table1;

  WHILE (counter <= end) DO
    INSERT INTO table1 VALUES (start,null,counter,start+counter,end); 
    SET counter = counter+1;
  END WHILE;
END;

在这里试试:https://dbfiddle.uk/X6vP3wKW

Mysql相关问答推荐

如何重新采样SQL数据库

SQL/Pyspark -判断条件

mysql 代码给我的外键格式不正确

如何从mysql中的不可用日期范围获取可用日期范围?

为大表优化 Django 模型

关联同一个表中的两列

使用sql查找源和最终目的地

如何查找列的所有值都相同的行?

如何使用 express.js 和 react.js 删除连接表中的元素和关联元素

如何从具有第一行列值的表中 Select 客户的最新记录

MySQL - 考虑到所有前几天,每天计算唯一用户

MySQL在定义表的位置后抛出错误

MySQL REGEXP 在没有 BINARY 模式的情况下区分大小写?

插入重复键查询以在每一行上进行自定义更新

MySQL:在 Select 语句中自动增加临时列

PHP 判断 NULL

我应该使用什么列数据类型来存储大量文本或 html

MySQL查询/子句执行顺序

数据截断:第 1 行的logo列数据太长

MySQL中的base64编码