【问题标题】:MySQL returning two different results from query vs stored procedureMySQL 从查询和存储过程返回两个不同的结果
【发布时间】:2022-11-13 10:40:28
【问题描述】:

我很困惑为什么 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。

【问题讨论】:

    标签: mysql mysql-workbench mysql-8.0


    【解决方案1】:

    您应该将过程参数命名为与列名不同的名称。列名不区分大小写。

    现在,您的过程有一个具有以下条件的查询:

    WHERE ScheduleID = ScheduleID AND LocationID = LocationID
    

    其计算结果为true AND true,因为将列与其自身进行比较必然为真(除非该列为 NULL)。

    因此,对于LIMIT 1,查询返回两列都不为NULL 的第一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      相关资源
      最近更新 更多