在 SET 语句中使用 MIN() MySQL

Kal*_*lol 3 mysql min sql-update

我正在使用 MySQL。让我们调用一张我拥有的表格,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 | +----+--------+--------+-------------+----------+

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

我试过了:

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

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

无论如何要实现这个而不是游标?

编辑: Price1 and Price2can be nullor 0and 在所有这些情况下,它应该被视为无穷大,以便其他价格与它相比变得最小。

Gio*_*sos 6

使用LEAST而不是MIN

UPDATE Inventory 
SET TargetPrice = LEAST(Price1,Price2) 
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)

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

编辑:

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(Price1, Price2), COALESCE(Price2, Price1))  
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)

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

编辑2:

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

UPDATE Inventory 
SET TargetPrice = LEAST(COALESCE(NULLIF(Price1,0), Price2), 
                        COALESCE(NULLIF(Price2,0), Price1))  
WHERE Quantity = 0
Run Code Online (Sandbox Code Playgroud)