[英]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 ;
Hello I am trying to make a delimiter that counts number of CID by WorkTime (which means work session consists of 1,2,3) by putting certain WorkDate (which I set as objectivedate).您好,我正在尝试通过放置某些 WorkDate(我将其设置为objectivedate)来创建一个按 WorkTime 计算 CID 数量的分隔符(这意味着工作 session 由 1、2、3 组成)。
When I put CALL("2020-05-11")当我拨打 CALL("2020-05-11")
The error says that:错误说:
Error Code: 1241. Operand should contain 1 column(s) 0.000 sec
I am certain that it's about SET var1... row, but I don't know how to fix this.我确定它与 SET var1... 行有关,但我不知道如何解决这个问题。 I am desperate!!!生无可恋!!!
You have a syntax error in your where clause of all 3 queries您在所有 3 个查询的 where 子句中都有语法错误
write like below:写如下:
var1= SELECT COUNT(CID) FROM erd.caddy WHERE WorkDate=objectiveDate and WorkTime='1'
You need to use boolean expressions for your conditions.您需要针对您的条件使用 boolean 表达式。
For example you have:例如,您有:
WHERE (WorkDate = objectivedate, WorkTime = '1')
But it should be:但它应该是:
WHERE (WorkDate = objectivedate AND WorkTime = '1')
Also I'm not sure you intended this:另外,我不确定您是否打算这样做:
WorkDate = 'objectivedate'
Putting 'objectivedate' in the single-quotes makes it a literal string 'objectivedate', not the variable objectivedate
which is the date input parameter of the procedure.将“objectivedate”放在单引号中使其成为文字字符串“objectivedate”,而不是作为过程日期输入参数的变量objectivedate
。
Finally, I can suggest a simplification to your procedure:最后,我可以建议简化您的程序:
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
This gets all three counts in one query, and you can skip declaring the local variables.这将在一个查询中获得所有三个计数,并且您可以跳过声明局部变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.