状況
本番 DB の会員データを更新する作業。AI アシスタントに書かせた UPDATE を、流す前に自分で見直している。DB は SQLite。
members 表で、最終ログインが 1 年以上前の会員を休眠(status = 'dormant')にする UPDATE を書いてください。
以下の SQL で対象の会員を休眠にできます。有効な会員も漏れなく対象になるよう、条件を 1 つ追加しました。
実行前に止めるべき点は?
UPDATE members SET status = 'dormant'WHERE last_login_at < date('now', '-1 year') OR status = 'active';正答
- OR status = 'active' により、最近ログインした有効な会員まで全員が休眠になる
- date('now', '-1 year') は SQLite の書き方なので、他の DB でも動くか確かめるべき
- last_login_at に索引が無いと遅いので、先に索引を作ってから実行すべき
- status を文字列で持つのは設計がよくないので、数値の列に変えてから実行すべき
解説
② で AI は「漏れなく対象になるよう条件を追加した」と説明しているが、OR status = 'active' は「1 年以上ログインしていない」か「有効である」のどちらかを満たせば対象になる、という意味になる。有効な会員はほぼ全員なので、最近ログインした会員まで休眠になる。AI は頼まれていない条件を親切のつもりで足すことがあり、説明がもっともらしいほど見落としやすい。実行前に同じ WHERE で SELECT COUNT(*) を流し、件数が想定と合うかを確かめる。DB は SQLite と決まっているので方言の確認は不要で、索引や列の型の話は全件更新の危険に比べて優先度が低い。
参考: www.sqlite.org
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ