id が 42 のユーザーだけを無効化したい。直したものは?
UPDATE users SET status = 'inactive';正答
- UPDATE users SET status = 'inactive' AND id = 42;
- UPDATE users WHERE id = 42 SET status = 'inactive';
- UPDATE users SET status = 'inactive', id = 42;
- UPDATE users SET status = 'inactive' WHERE id = 42;
解説
WHERE の無い UPDATE は全行を更新する。対象を絞る条件は SET 句の後ろに WHERE で書く。選択肢 1 は AND を条件のつもりで書いているが、実際は status に 'inactive' AND id = 42 という真偽値(0)を全行に代入してしまう。選択肢 2 は WHERE と SET の順序が逆で構文エラー。選択肢 3 はカンマで区切っているため id を 42 に書き換える代入になり、主キーの重複でエラーになる。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ