进行以下查询后:
SELECT CP.code
FROM cart_products AS CP
INNER JOIN products AS P
ON P.code = CP.code
WHERE CP.cartID = 22207
AND (P.stock - CP.quantity) > 0
我收到以下错误:
#1690 - BIGINT UNSIGNED 值超出 (`DB_NAME`.`p`.`stock` - `DB_NAME`.`cp`.`quantity`)' 的范围
表的结构如下:
CREATE TABLE `products` (
`productID` int(10) UNSIGNED NOT NULL,
`code` tinytext COLLATE latin1_general_ci NOT NULL,
`stock` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
CREATE TABLE `cart_products` (
`cartID` int(10) UNSIGNED NOT NULL,
`code` tinytext COLLATE latin1_general_ci NOT NULL,
`quantity` mediumint(8) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
如何在不出现此错误的情况下进行查询?
该错误是由“无符号整数溢出”引起的
我找到的解决方案是将(
CAST
)无符号(eg: UNSIGNED
)整数转换为有符号(eg: SIGNED
)解决方案:
发生错误是因为 2 个无符号整数之间的计算预计也会产生一个无符号整数。但是,如果计算可能导致负数(这是您的情况),显然这是无效的。
一种解决方案是
CAST
您在答案中提到的解决方案。但更简单的是使用以下等效条件来避免计算和负数的风险: