停止リスト bans にある全ユーザーを無効化したい。空欄に入るものは?
UPDATE users SET active = 0WHERE id ____ (SELECT user_id FROM bans);正答
- =
- LIKE
- EXISTS
- IN
解説
サブクエリが複数行を返すとき、そのどれかに一致するかを判定するのは IN。= にすると、PostgreSQL などではエラーになるが、SQLite はサブクエリの 1 行目だけと比べるので、エラーにならないまま一部のユーザーしか更新されない。LIKE も同じく 1 行目との比較になる。EXISTS は id EXISTS のように列の後ろには書けず、構文エラーになる。UPDATE の後は変更件数が対象の人数と一致するかを必ず確かめる。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ