2017-09-04 9 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

Thanks @Madhivanan私は1分ごとにこのクエリを実行し、このクエリは両方のテーブル(userとactivity_stats)のすべてのレコードを更新するので、余分なサブクエリ(select)を使用せずにこのクエリを書くことができます。 –

+0

私は変数の代わりに表現自体を使うことができると思います。私の編集した返信を見る – Madhivanan

関連する問題