SQL記述難易度 標準

id 42 だけ無効化したいのに全行が更新された。UPDATE 文を 1 行で正しく直して書いてください。

BEGIN;UPDATE usersSET status = 'inactive';WHERE id = 42;COMMIT;

正答

正答UPDATE users SET status = 'inactive' WHERE id = 42;

解説

3 行目の末尾のセミコロンで UPDATE 文が終わり、WHERE の無い UPDATE として全行の status が書き換わる。続く WHERE id = 42; は独立した不正な文としてエラーになるが、更新は既に実行済み。SET の後ろのセミコロンを消し、WHERE までを 1 文にすれば直る。WHERE の行を SET の前に移す直し方は誤りで、UPDATE は SET の後に WHERE を書く決まり。実行前に同じ条件の SELECT で対象行数を確かめると事故を防げる。

参考: www.sqlite.org

updatewhere

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ