SQL4 択難易度 基礎

結合条件 ON u.id = o.user_id を足したい。正しく直したものは?

SELECT u.name, o.amountFROM users uJOIN orders oWHERE o.amount > 100;

正答

  1. SELECT u.name, o.amount ON u.id = o.user_id FROM users u JOIN orders o WHERE o.amount > 100;
  2. SELECT u.name, o.amount FROM users u ON u.id = o.user_id JOIN orders o WHERE o.amount > 100;
  3. SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;
  4. 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

joinclause-order

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

SQLクイズへ