在 SET 语句中使用 MIN() MySQL

Using MIN() in SET statement MySQL

我正在使用 MySQL。让我们将我拥有的 table 称为 Inventory,如下所示:

+----+--------+--------+-------------+----------+ | ID | Price1 | Price2 | TargetPrice | Quantity | +----+--------+--------+-------------+----------+ | 1 | 12 | 1 | | 0 | | 2 | 3 | 3 | 3 | 2 | | 3 | | 4 | | 0 | | 4 | 2 | 2 | 2 | 2 | | 5 | 5 | 45 | 5 | 1 | +----+--------+--------+-------------+----------+

现在,我需要将 TargetPrice 更新为 Quantity 为 0 的任何行的 Price1 和 Price2 中的最小值

我试过:

UPDATE Inventory SET TargetPrice= MIN(Price1,Price2) WHERE Quantity >0

但是,MySQL 抱怨 MIN() 函数的使用。我知道它期望 MIN() 处理列内包含的数据,而不是对指定行的两列进行 MIN()。

除了游标之外,还有其他实现方法吗?

编辑: Price1Price2 可以是 null0,在所有这些情况下,它应该被视为无穷大,以便与它进行比较时另一个价格变得最小。

使用LEAST代替MIN

UPDATE Inventory 
SET TargetPrice = LEAST(Price1,Price2) 
WHERE Quantity = 0

MIN 是对行集进行操作的聚合函数,而 LEAST 对传递的参数列表进行操作。

编辑:

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(Price1, Price2), COALESCE(Price2, Price1))  
WHERE Quantity = 0

您可以使用 COALESCE 来处理 NULL 值。

EDIT2:

您可以使用 NULLIF 来处理 0 值:

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(NULLIF(Price1,0), Price2), 
                        COALESCE(NULLIF(Price2,0), Price1))  
WHERE Quantity = 0