从 table 更新一个值,该值依赖于另一个 table 中的 ENUM 列的值
Updating a value from a table that is dependent on the value of an ENUM column in another table
我有一个 table placed_order
,其中包含 order_time
(时间戳)、estimated_delivery_time
(时间戳)等列。在第二个 table addresses
中有 zone
列(除其他列外)。
zone
列是一个 ENUM 字段,包含值 'Zone 1'、'Zone 2'、'Zone 3'.
现在我需要计算 estimated_delivery_time
。根据区域的不同,它是 order_time
加上 10 分钟(1 区)、15 分钟(2 区)或 20 分钟(3 区)。
我已经知道如何通过手动添加分钟来计算 estimated_delivery_time
:
UPDATE `placed_order`
SET `estimated_delivery_time` = DATE_ADD(`order_time`, INTERVAL 10 MINUTE)
WHERE placed_order_id = 9;
但我一直在努力寻找如何根据区域计算 estimated_delivery_time
的解决方案。我已经尝试使用 SELECT IF 和 CASE 子句,但找不到方法。有什么建议吗?
您可以使用 Case .. When
来更新 estimated_delivery_time
。尝试以下查询:
UPDATE `placed_order` AS po
JOIN `addresses` AS addr ON addr.customer_id = po.customer_id
SET po.estimated_delivery_time = CASE addr.zone
WHEN 'Zone 1'
THEN DATE_ADD(po.order_time, INTERVAL 10 MINUTE)
WHEN 'Zone 2'
THEN DATE_ADD(po.order_time, INTERVAL 15 MINUTE)
WHEN 'Zone 3'
THEN DATE_ADD(po.order_time, INTERVAL 20 MINUTE)
END
我有一个 table placed_order
,其中包含 order_time
(时间戳)、estimated_delivery_time
(时间戳)等列。在第二个 table addresses
中有 zone
列(除其他列外)。
zone
列是一个 ENUM 字段,包含值 'Zone 1'、'Zone 2'、'Zone 3'.
现在我需要计算 estimated_delivery_time
。根据区域的不同,它是 order_time
加上 10 分钟(1 区)、15 分钟(2 区)或 20 分钟(3 区)。
我已经知道如何通过手动添加分钟来计算 estimated_delivery_time
:
UPDATE `placed_order`
SET `estimated_delivery_time` = DATE_ADD(`order_time`, INTERVAL 10 MINUTE)
WHERE placed_order_id = 9;
但我一直在努力寻找如何根据区域计算 estimated_delivery_time
的解决方案。我已经尝试使用 SELECT IF 和 CASE 子句,但找不到方法。有什么建议吗?
您可以使用 Case .. When
来更新 estimated_delivery_time
。尝试以下查询:
UPDATE `placed_order` AS po
JOIN `addresses` AS addr ON addr.customer_id = po.customer_id
SET po.estimated_delivery_time = CASE addr.zone
WHEN 'Zone 1'
THEN DATE_ADD(po.order_time, INTERVAL 10 MINUTE)
WHEN 'Zone 2'
THEN DATE_ADD(po.order_time, INTERVAL 15 MINUTE)
WHEN 'Zone 3'
THEN DATE_ADD(po.order_time, INTERVAL 20 MINUTE)
END