【问题标题】:Updating a value from a table that is dependent on the value of an ENUM column in another table更新依赖于另一个表中 ENUM 列值的表中的值
【发布时间】:2018-10-21 23:00:32
【问题描述】:

我有一张表placed_order,其中包含order_time(时间戳)、estimated_delivery_time(时间戳)等列。在第二个表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 子句,但找不到方法。有什么建议吗?

【问题讨论】:

  • 查看multitable update 语法和case 语句以将区域解析为时间间隔。
  • 如何连接两个表?什么是join关系?
  • 两个表都有“customer_id”(来自第三个表“客户”的 PK 作为外键。这足以连接它们吗?
  • @dandelia 检查发布的答案。谢谢
  • @MadhurBhaiya 它有效!我非常感谢您的快速帮助!非常感谢!

标签: mysql enums sql-update dateadd


【解决方案1】:

您可以使用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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多