SQL4 択難易度 標準

ユーザー名と注文金額を正しく対応づけたい。直したものは?

SELECT u.name, o.amount FROM users uJOIN orders o ON u.id = o.id ORDER BY o.id;

正答

  1. SELECT u.name, o.amount FROM users u JOIN orders o USING (id) ORDER BY o.id;
  2. SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id ORDER BY o.id;
  3. SELECT u.name, o.amount FROM users u JOIN orders o ON u.name = o.user_id ORDER BY o.id;
  4. SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.id WHERE o.user_id = u.id ORDER BY o.id;

解説

orders の id は注文自身の番号で、ユーザーを指すのは外部キーの user_id である。u.id = o.id では「ユーザー番号と注文番号が偶然同じ」行が結合され、無関係な組み合わせが返る。選択肢 1 の USING (id) は両表の id どうしを比べるので修正前と同じ誤り。選択肢 4 は誤った ON に条件を足しただけで、両方を満たす行しか残らない。

参考: www.sqlite.org

joinforeign-key

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

SQLクイズへ