2017-09-04 26 views
1

如何在执行Update语句时设置变量?如何在更新查询中使用临时变量?

我似乎无法弄清楚语法。我使用这个@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' 

,但它说的语法是错误的: but it's saying the syntax is wrong

+0

编辑您的问题并提供(1)样本数据; (2)期望的结果; (3)对逻辑的清晰解释。 –

+0

你有没有尝试在分配之前丢掉'set'? – cars10m

回答

0

你可以试试这个?

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' 
+0

感谢@Madhivanan我们可以在不使用额外子查询(select)的情况下编写此查询,因为我希望在每一分钟内运行此查询,并且此查询更新两个表(user和activity_stats)中的所有记录。 –

+0

我认为你可以使用表达式本身来代替变量。看到我编辑的答复 – Madhivanan

相关问题