繁体   English   中英

错误代码:1241。操作数应包含 1 列不知道如何解决此问题

[英]Error Code: 1241. Operand should contain 1 column(s) don't know how to fix this

DELIMITER //
CREATE PROCEDURE positioner(objectivedate date)
BEGIN
    DECLARE var1 INT(3) DEFAULT 0;
    DECLARE var2 INT(3) DEFAULT 0;
    DECLARE var3 INT(3) DEFAULT 0;
    
    SET var1 = (SELECT COUNT(CID) FROM erd.caddy WHERE (WorkDate = objectivedate, WorkTime = '1'));
    SET var2 = (SELECT COUNT(CID) FROM erd.caddy WHERE (WorkDate = 'objectivedate', WorkTime = '2'));
    SET var3 = (SELECT COUNT(CID) FROM erd.caddy WHERE (WorkDate = 'objectivedate', WorkTime = '3'));
    SELECT var1 AS '1부',var2 AS '2부', var3 AS '3부';
END; //
DELIMITER ;

您好,我正在尝试通过放置某些 WorkDate(我将其设置为objectivedate)来创建一个按 WorkTime 计算 CID 数量的分隔符(这意味着工作 session 由 1、2、3 组成)。

当我拨打 CALL("2020-05-11")

错误说:

Error Code: 1241. Operand should contain 1 column(s)    0.000 sec

我确定它与 SET var1... 行有关,但我不知道如何解决这个问题。 生无可恋!!!

您在所有 3 个查询的 where 子句中都有语法错误

写如下:

var1= SELECT COUNT(CID) FROM erd.caddy WHERE WorkDate=objectiveDate and WorkTime='1'

您需要针对您的条件使用 boolean 表达式。

例如,您有:

WHERE (WorkDate = objectivedate, WorkTime = '1')

但它应该是:

WHERE (WorkDate = objectivedate AND WorkTime = '1')

另外,我不确定您是否打算这样做:

WorkDate = 'objectivedate'

将“objectivedate”放在单引号中使其成为文字字符串“objectivedate”,而不是作为过程日期输入参数的变量objectivedate

最后,我可以建议简化您的程序:

CREATE PROCEDURE positioner(objectivedate date)
BEGIN
    SELECT 
        COUNT(CASE WorkTime WHEN '1' THEN true END) AS '1부',
        COUNT(CASE WorkTime WHEN '2' THEN true END) AS '2부',
        COUNT(CASE WorkTime WHEN '3' THEN true END) AS '3부'
    FROM erd.caddy
    WHERE WorkDate = objectivedate;
END

这将在一个查询中获得所有三个计数,并且您可以跳过声明局部变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM