同じテーブルのデータに応じて、複数の行にわたって1つの列を更新します。mysqlの同じテーブルから複数の行を更新する
update table1 set status=newtime
from (
select
case
when TIME_FORMAT(TIMEDIFF(ADDTIME(time_val, '120:00:00'), NOW()), '%Hh %im %ss')<0 then '4'
else '0'
end as newtime,
id as new_id
FROM table1
where id2='2'
and status='0'
)
where id=new_id
これは私のクエリです。前もって感謝します。
編集:
これは、これを達成するための代替クエリです。しかし、それはまた、私にエラー
" - すべての派生テーブルは、独自の別名を持っている必要があります。#1248"
を与えます。私は、クエリからの2つの列をフェッチしていますようupdate table1 set status= (select case when timeleft<0 then '4' else '0' end as something, new_id from ( select TIME_FORMAT(TIMEDIFF(ADDTIME(time_val, '120:00:00'), NOW()), '%Hh %im %ss') as newtime, id as new_id FROM table1 where id2='2' and status='0' ) } where id=new_id
私は、エイリアスを使用することはできません。どんな助けも素晴らしいだろう。
、どこに問題がありますか?どこで立ち往生しましたか? – Lion
エイリアスは 'SELECT q1.newTime、q1.new_id FROM(SELECT newTime、new_id FROM ...)q1'のようにするだけで使用できます。その場合、 'q1'は派生テーブルのエイリアスです。しかし、あなたのケースでは、サブクエリのように見えます。そして/または結合は不要です。下の私の答えを見てください。 – Travesty3