【问题标题】:How to use temporary variable in Update query?如何在更新查询中使用临时变量?
【发布时间】:2017-09-04 11:44:24
【问题描述】:

如何在执行更新语句时设置变量?

我似乎无法弄清楚语法。我正在使用这个@tp 变量来保存计算结果,它将在when 条件下使用。

我想要这样的东西:

UPDATE users IU
INNER JOIN activity_stats DAS
    ON (IU.user_id=DAS.for_user_id), set
    @tp:= IU.total_subscription_time - (unix_timestamp()- IU.start_date),
    IU.time_period_left = CASE WHEN @tp > 0 THEN @tp ELSE 0 END,
    IU.used_time = (unix_timestamp() - IU.start_date),
    IU.status = CASE WHEN @tp > 0 THEN 'A' ELSE 'I' END,
    DAS.total_time_used = DAS.total_time_used + IU.used_time 
WHERE IU.time_period_left > 0
  AND IU.status='A'

但它说语法错误:

【问题讨论】:

  • 编辑您的问题并提供(1)样本数据; (2) 期望的结果; (3)逻辑清晰。
  • 你有没有试过在分配之前省略set

标签: mysql sql


【解决方案1】:

你可以试试这个吗?

  UPDATE users IU
INNER JOIN activity_stats DAS
    ON (IU.user_id=DAS.for_user_id), 
    IU.time_period_left = CASE WHEN (IU.total_subscription_time - (unix_timestamp()- IU.start_date)) > 0 THEN 
                        (IU.total_subscription_time - (unix_timestamp()- IU.start_date))  ELSE 0 END,
    IU.used_time = (unix_timestamp() - IU.start_date),
    IU.status = CASE WHEN (IU.total_subscription_time - (unix_timestamp()- IU.start_date)) > 0 THEN 'A' ELSE 'I' END,
    DAS.total_time_used = DAS.total_time_used + IU.used_time 
WHERE IU.time_period_left > 0
  AND IU.status='A'

【讨论】:

  • 谢谢@Madhivanan 我们可以在不使用额外子查询(选择)的情况下编写此查询,因为我想每隔一分钟运行一次此查询,并且此查询会更新我在两个表中的所有记录(用户和活动统计)。
  • 我认为您可以使用表达式本身来代替变量。查看我编辑的回复
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2020-09-19
  • 2017-10-17
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多