現在のデータ
表1 | 更新日(日付) | 接続先(文字列) | 最新フラグ(文字列) |
---|---|---|---|
1 | 2019/11/12 | A | 0 |
2 | 2019/11/11 | A | 0 |
3 | 2019/11/11 | B | 0 |
4 | 2019/11/10 | C | 0 |
アップデートして取得したいデータ
デフォルトでは最新フラグが'0'になっています。
これを接続先別で最新の更新日のレコードのみ、最新フラグを'1'にアップデートしたいです。
更新日(日付) | 接続先(文字列) | 最新フラグ(文字列) | |
---|---|---|---|
1 | 2019/11/12 | A | 1 |
2 | 2019/11/11 | A | 0 |
3 | 2019/11/11 | B | 1 |
4 | 2019/11/10 | C | 1 |
書いてみたSQL1
sql
1update 表1 2set 最新フラグ = '1' 3where 1=1 4and 表1.更新日 = (select 表2.最新更新日 from 5 (select max(更新日) as 最新更新日, 接続先 from 表1 表2 group by 接続先)) 6and 表1.接続先 = (select 表2.接続先 from 7 (select max(更新日) as 最新更新日, 接続先 from 表1 表2 group by 接続先))
結果エラー1:Every derived table must have its own alias
書いてみたSQL2
結果エラー1を受けて下記に修正
sql
1update 表1 2set 最新フラグ = '1' 3where 1=1 4and 表1.更新日 = (select 表2.最新更新日 from 5 (select max(更新日) as 最新更新日, 接続先 from 表1 group by 接続先) as 表2) 6and 表1.接続先 = (select 表2.接続先 from 7 (select max(更新日) as 最新更新日, 接続先 from 表1 group by 接続先) as 表2)
結果エラー2:Subquery returns more than 1 row
結果エラー2を受けて下記のリファレンスを確認しましたが、どう修正すればいいのか理解ができませんした・・・
恐縮ですがご教授頂ければ幸いです。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.10.9 サブクエリーのエラー -
自己解決しました
なんか難しく考えすぎました。下記のsqlで解決しました。
sql
1UPDATE 2 表1, 3 (select max(`更新日`) as '最新更新日', `接続先名` 4 from 表1 5 group by `接続先名`) 表2 6set 表1.`最新フラグ` = '1' 7where 1=1 8and 表1.`更新日` = 表2.最新更新日 9and 表1.`接続先名` = 表2.`接続先名`
回答1件
あなたの回答
tips
プレビュー