MySQL从查询和存储过程返回两个不同的结果

rsl1atfo  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(198)

我不明白为什么MySQL Workbench对该查询返回7(正确答案

SELECT ScheduleLocationEventColorID 
FROM schedulelocationeventcolor 
WHERE ScheduleID = 1 AND LocationID = 1;

但对于存储过程中的等效项返回1(不正确)。

CREATE PROCEDURE `test`(
    IN locationID INT,
    IN scheduleID INT
)
BEGIN
    DECLARE slecID INT;

    SELECT ScheduleLocationEventColorID 
    INTO slecID 
    FROM schedulelocationeventcolor 
    WHERE ScheduleID = scheduleID AND LocationID = locationID
    LIMIT 1;
    
    SELECT slecID;
END

-- calling the stored procedure here: 
CALL `test`(1, 1);

我尝试更改存储过程调用中的输入,但我怎么也想不出为什么结果应该是7,但却总是得到1。

dw1jzc5e

dw1jzc5e1#

您应该将程序参数命名为与数据行名称不同的名称。Column names are case-insensitive
现在,您的过程有一个具有以下条件的查询:

WHERE ScheduleID = ScheduleID AND LocationID = LocationID

它的计算结果为true AND true,因为将列与其自身进行比较必定为true(除非该列为NULL)。
因此,使用LIMIT 1时,查询会传回第一个数据列,其中两个数据行都不是NULL。

相关问题