MySQL在减去无符号值时如何使负结果成为可能?

jur*_*iks 7 mysql

我有左表连接加入的三个表.这是代码:

SELECT
(LEAST(`a`.`price, `b`.`price`) - `c`.`price`) AS `diff`
...
ORDER BY `diff` DESC
Run Code Online (Sandbox Code Playgroud)

问题:c.price大于最小值,因此减法为负并且抛出BIGINT UNSIGNED值超出范围.我该怎么做才不会抛出这个荒谬的错误?
这是结果数据,我没有修改表中的实际数据,为什么它不允许我这样做呢?我已经尝试过CAST(LEAST(...) AS SIGNED)将这两列列在LEAST内,因为已签名,但都没有用.

Alb*_*eón 7

在LEAST之前和减去之前将每个数字转换为SIGNED

SELECT
(LEAST(CAST(`a`.`price` AS SIGNED), CAST(`b`.`price` AS SIGNED)) - CAST(`c`.`price` AS SIGNED)) AS `diff`
...
ORDER BY `diff` DESC
Run Code Online (Sandbox Code Playgroud)