MySQL:错误代码:1292。截断了不正确的 DOUBLE 值
MySQL: Error Code: 1292. Truncated incorrect DOUBLE value
我正在尝试创建一个存储函数,用于测试数据库中是否存在多个事物 return 布尔语句如果至少存在一个则为 false,如果 none 存在则为 true。
具体来说,有多个 table 我要加入,即:BurgerOrder、Patties、Buns。
BurgerOrder table 包含 PattyID(汉堡中的肉)和 BunID(面包类型)。请注意,一个汉堡可以有 2 个肉饼。这是我试过的。
DELIMITER //
CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC
BEGIN
DECLARE Result VARCHAR(5);
IF BunCode NOT IN (SELECT B.ID
FROM BurgerOrder BO JOIN Patties P JOIN Buns B
ON B.ID = BO.BunID AND P.ID = B.PattyID
WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or 'Beef')
THEN SET Result = TRUE;
ELSE SET Result = FALSE;
END IF;
RETURN Result;
END //
DELIMITER ;
有几件事我不确定。它 returns VARCHAR(5) 因为我找不到布尔数据类型。它目前 returns 1s 或 0s 为 true 和 false。
其次,我相信这个功能在我实际测试时似乎工作得很好,只有一个错误。
Error Code: 1292. Truncated incorrect DOUBLE value: 'Beef'
我希望在我测试的任何特定汉堡订单中出现牛肉、鸡肉或酵母面包时,该函数 return 为真。但我认为导致问题的原因是我输入的汉堡里面有 2 个牛肉饼。当我 运行 以上功能时,它工作正常。只有当我调用函数(例如 Select PattyTest(23))时才显示错误代码 1292.
奇怪的是 SQL 显示了一次错误消息,然后继续正常工作并且 return 得到了正确的结果。
非常感谢任何帮助!
您在 where 子句中遗漏了比较列
改用这个
DELIMITER //
CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC
BEGIN
DECLARE Result VARCHAR(5);
IF BunCode NOT IN (SELECT B.ID
FROM BurgerOrder BO JOIN Patties P JOIN Buns B
ON B.ID = BO.BunID AND P.ID = B.PattyID
WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or P.Type = 'Beef')
THEN SET Result = TRUE;
ELSE SET Result = FALSE;
END IF;
RETURN Result;
END //
DELIMITER ;
此消息意味着您正在尝试比较 WHERE 或 ON 子句中的数字和字符串,要么确保它们具有相似的声明,要么使用显式 CAST 来将数字转换为字符串。
我猜 WHERE 子句有问题 P.Type = 'Grilled Chicken' 或 'Beef'
具有多个 OR 子句的数据库引擎试图将 'Beef' 评估为单独的条件
改为
WHERE B.Type = 'sourdough' 或 P.Type 在('Grilled Chicken' 或 'Beef')
我正在尝试创建一个存储函数,用于测试数据库中是否存在多个事物 return 布尔语句如果至少存在一个则为 false,如果 none 存在则为 true。
具体来说,有多个 table 我要加入,即:BurgerOrder、Patties、Buns。
BurgerOrder table 包含 PattyID(汉堡中的肉)和 BunID(面包类型)。请注意,一个汉堡可以有 2 个肉饼。这是我试过的。
DELIMITER //
CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC
BEGIN
DECLARE Result VARCHAR(5);
IF BunCode NOT IN (SELECT B.ID
FROM BurgerOrder BO JOIN Patties P JOIN Buns B
ON B.ID = BO.BunID AND P.ID = B.PattyID
WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or 'Beef')
THEN SET Result = TRUE;
ELSE SET Result = FALSE;
END IF;
RETURN Result;
END //
DELIMITER ;
有几件事我不确定。它 returns VARCHAR(5) 因为我找不到布尔数据类型。它目前 returns 1s 或 0s 为 true 和 false。
其次,我相信这个功能在我实际测试时似乎工作得很好,只有一个错误。
Error Code: 1292. Truncated incorrect DOUBLE value: 'Beef'
我希望在我测试的任何特定汉堡订单中出现牛肉、鸡肉或酵母面包时,该函数 return 为真。但我认为导致问题的原因是我输入的汉堡里面有 2 个牛肉饼。当我 运行 以上功能时,它工作正常。只有当我调用函数(例如 Select PattyTest(23))时才显示错误代码 1292.
奇怪的是 SQL 显示了一次错误消息,然后继续正常工作并且 return 得到了正确的结果。
非常感谢任何帮助!
您在 where 子句中遗漏了比较列
改用这个
DELIMITER //
CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC
BEGIN
DECLARE Result VARCHAR(5);
IF BunCode NOT IN (SELECT B.ID
FROM BurgerOrder BO JOIN Patties P JOIN Buns B
ON B.ID = BO.BunID AND P.ID = B.PattyID
WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or P.Type = 'Beef')
THEN SET Result = TRUE;
ELSE SET Result = FALSE;
END IF;
RETURN Result;
END //
DELIMITER ;
此消息意味着您正在尝试比较 WHERE 或 ON 子句中的数字和字符串,要么确保它们具有相似的声明,要么使用显式 CAST 来将数字转换为字符串。
我猜 WHERE 子句有问题 P.Type = 'Grilled Chicken' 或 'Beef' 具有多个 OR 子句的数据库引擎试图将 'Beef' 评估为单独的条件
改为
WHERE B.Type = 'sourdough' 或 P.Type 在('Grilled Chicken' 或 'Beef')