SQL4 択難易度 応用

停止リスト bans にある全ユーザーを無効化したい。空欄に入るものは?

UPDATE users SET active = 0WHERE id ____ (SELECT user_id FROM bans);

正答

  1. =
  2. LIKE
  3. EXISTS
  4. IN

解説

サブクエリが複数行を返すとき、そのどれかに一致するかを判定するのは IN。= にすると、PostgreSQL などではエラーになるが、SQLite はサブクエリの 1 行目だけと比べるので、エラーにならないまま一部のユーザーしか更新されない。LIKE も同じく 1 行目との比較になる。EXISTS は id EXISTS のように列の後ろには書けず、構文エラーになる。UPDATE の後は変更件数が対象の人数と一致するかを必ず確かめる。

参考: www.sqlite.org

updatesubqueryin

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

SQLクイズへ