【问题标题】:MYSQL: ERROR 1241 (21000): Operand should contain 1 column(s)MYSQL:错误 1241 (21000):操作数应包含 1 列
【发布时间】:2018-12-02 15:05:59
【问题描述】:

这应该可以工作,但我得到了一个错误。我想从表中获取学分列并将其乘以 100。问题是获取给定学生 ID 和年份的学分数量并获得总付款。假设每笔积分为 100 美元。

delimiter //
create function fTest (stuYear varchar(4), stuID varchar(4))
returns varchar(200)
begin
declare msg varchar(200) default '';
if (stuYear = '' or stuYear is null) then 
    select 'Please input a valid year' into msg;
elseif (stuID = '' or stuID is null) then 
    select 'Please input a student  id' into msg;    
else
begin

if (msg = '' or msg is null) then
    select ('No result found for student ID: ', stuID, ' at year: ', stuYear) into msg; 
select (credits * 100) into msg from Students_Courses natural join Courses where sid=stuID and year=stuYear group by credits;
return msg ;    
end if;    
end ;
end if;
end ;
//
delimiter ;

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    这是不正确的:

    select ('No result found for student ID: ', stuID, ' at year: ', stuYear)
    

    一个 select 语句可以包含多个列,但不应将它们括在括号中。此外,这将返回多个值,您无法将它们选择到单个消息中。

    所以,我猜你想将这些值连接成一个值。您可以使用concat 函数来做到这一点,如下所示:

    select concat('No result found for student ID: ', stuID, ' at year: ', stuYear)
    

    顺便说一句,使用 concat 函数的正常赋值也应该在触发器中工作:

    SET msg = concat('No result found for student ID: ', stuID, ' at year: ', stuYear);
    

    MySQL concat function

    PS:在下一个语句中,您还得到了括号:(credits * 100) 在这种情况下,它会意外地起作用,因为它是一个单一的表达式。不过,它们没有任何功能价值,不妨将其移除。

    【讨论】:

    • @Jay2019 。 . .如果这回答了您的问题,您应该考虑接受答案。
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    相关资源
    最近更新 更多