mysql - 从查询结果

时间:2017-02-07 11:44:12

标签: mysql sql stored-procedures local-variables

我正在尝试创建一个存储过程,该存储过程将执行在结束前显示为行的选择。它将从我的usertable中获取最早的StartDate和最新的EndDate,并从我的参考日历表中选择这些日期之间的所有日期。不幸的是,无论我将尝试使用什么语法,我总是会收到一条错误消息,指出将usertable选择的值分配给start / endday变量。我没有找到很多资源来指定我从以下实例中看到的正确语法。

DELIMITER $$
CREATE PROCEDURE seldays() 

BEGIN 

DECLARE startday DATE;
SET startday = (SELECT MIN(StartDate) from user1table1);
DECLARE endday DATE;
SET endday = (SELECT MAX(EndDate) from user1table1);
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday;

END $$
DELIMITER ;

我也试图分配值

SELECT MIN(StartDate) from user1table1 INTO endday;

无济于事。我可能能够在不存储这些变量的情况下使程序工作 - 但这是我迟早需要使用的东西。 那么如何在Mysql中正确填充查询结果的局部变量呢?

4 个答案:

答案 0 :(得分:2)

我只会在一个查询中执行此操作。为什么要打扰变量?

SELECT c.calendar_date
FROM calendar c JOIN
     (SELECT MIN(StartDate) as startday, MAX(EndDate) as endday
      FROM user1table1
     ) u
     ON c.calendar_date >= u.startday AND c.calendar_date < u.endday;

答案 1 :(得分:1)

感谢评论 “声明变量应该在Ankit Agrawal上面”......

我可以得出结论。我发布这篇文章作为正确答案,所以如果有人有同样的问题,他们可以快速查看。

DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在其开始之前,在任何其他语句之前。

DELIMITER $$
CREATE PROCEDURE seldays() 

BEGIN 

DECLARE startday DATE;
DECLARE endday DATE;
SELECT MIN(StartDate) INTO startday FROM user1table1;
SELECT MAX(EndDate) INTO endday FROM user1table1;
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday;

END $$
DELIMITER ;

答案 2 :(得分:0)

SELECT MIN(StartDate) into startday from user1table1

答案 3 :(得分:0)

在MySQL中,您可以使用select ... into <variable list> from ... statement分配结果变量:

select min(StartDate) into startday from user1table1;
select max(EndDate) into endday from user1table1;