を使用して、履歴テーブル内の一連の ID の更新を実行したいと考えていますIN(1,2,3)
。もちろん、テーブルには同じ ID のエントリが複数あります。各 ID について、更新は最後の履歴エントリでのみ実行する必要があります。
1 回の更新でこれを実行する方法はありますか?
UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?
前もって感謝します。
を使用して、履歴テーブル内の一連の ID の更新を実行したいと考えていますIN(1,2,3)
。もちろん、テーブルには同じ ID のエントリが複数あります。各 ID について、更新は最後の履歴エントリでのみ実行する必要があります。
1 回の更新でこれを実行する方法はありますか?
UPDATE table SET fk_something = 123 WHERE id_something IN (1,2,3) AND ...?
前もって感謝します。
はい:
UPDATE yourtable
SET fk_something = 123
WHERE id_something=1
ORDER BY datecreated DESC
LIMIT 0,1
;
UPDATE yourtable
SET fk_something = 123
WHERE id_something=2
ORDER BY datecreated DESC
LIMIT 0,1
;
...
簡単にするために手順にまとめてください。(引数として CSV リストを渡す場合は、準備/実行を使用する必要があることに注意してください)
最後の日付を決定する列がある場合は、次のようUPDATE
なサブクエリでを使用できます。
update yourtable t1
inner join
(
select max(updated_at) MaxDate, id_something
from yourtable
group by id_something
) t2
on t1.id_something = t2.id_something
and t1.updated_at = t2.MaxDate
set t1.fk_something = 123
where t1.id_something IN (1,2,3)
SQL Fiddle with Demoを参照してください。
これは、サブクエリを使用しmax(updated_at)
て各 の値を取得しますid_something
。これらの行はテーブルに結合され、最新の行を確実に更新します。