結合条件 ON u.id = o.user_id を足したい。正しく直したものは?
SELECT u.name, o.amountFROM users uJOIN orders oWHERE o.amount > 100;正答
- SELECT u.name, o.amount ON u.id = o.user_id FROM users u JOIN orders o WHERE o.amount > 100;
- SELECT u.name, o.amount FROM users u ON u.id = o.user_id JOIN orders o WHERE o.amount > 100;
- SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;
- SELECT u.name, o.amount FROM users u JOIN orders o WHERE o.amount > 100 ON u.id = o.user_id;
解説
JOIN の結合条件 ON は、結合する表を指定した直後に置く。FROM users u の後ろではまだ相手の表が出てきておらず、SQLite は a JOIN clause is required before ON というエラーを出す。WHERE の後ろに書くと構文エラー、SELECT 句は列を並べる場所で条件は書けない。元の文のように ON が無いと SQLite では全組み合わせ(直積)になり、別のユーザーの金額が付いた行まで出てしまう。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ