SQL4 択難易度 標準

id が 42 のユーザーだけを無効化したい。直したものは?

UPDATE users SET status = 'inactive';

正答

  1. UPDATE users SET status = 'inactive' AND id = 42;
  2. UPDATE users WHERE id = 42 SET status = 'inactive';
  3. UPDATE users SET status = 'inactive', id = 42;
  4. 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

updatewhere

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

SQLクイズへ