前提・実現したいこと
初めまして、SQL初心者です。
早速ですが、
A(グループ),B(生徒),C(性別)というテーブルがあるとします。
AとBは1:Nの関係で、
BとCは1:1の関係です。
- A(グループ)テーブル
id(pk) | b_id(pk) |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 4 |
3 | 5 |
- B(生徒)テーブル
id(pk) | c_id |
---|---|
1 | 1 |
2 | 1 |
3 | 2 |
4 | 1 |
5 | 1 |
- C(性別)テーブル
id(pk) | sex |
---|---|
1 | men |
2 | women |
発生している問題・エラーメッセージ
上記のテーブル構成で、グループに存在しない性別の生徒も含めて全レコードを取得したいのですが、SQL一回で取得できるものなのでしょうか。
- 期待する結果
a_id | b_id | c_id | name |
---|---|---|---|
1 | 1 | 1 | men |
1 | 2 | 1 | men |
1 | 3 | 2 | women |
2 | 4 | 1 | men |
2 | null | 2 | women |
3 | 5 | 1 | men |
3 | null | 2 | women |
試したこと
-- Aテーブル作成 create table A (id integer, b_id integer); insert into A values (1,1); insert into A values (1,2); insert into A values (1,3); insert into A values (2,4); insert into A values (3,5); -- Bテーブル作成 create table B (id integer, c_id integer); insert into B values (1,1); insert into B values (2,1); insert into B values (3,2); insert into B values (4,1); insert into B values (5,1); -- Cテーブル作成 create table C (id integer, name varchar(10)); insert into C values (1, 'men'); insert into C values (2, 'women');
外部結合なら結合できなかったものも取れるということでしたので、試して見ましたが
取得できませんでした・・
select A.id a_id, B.id b_id, C.id c_id, C.name from A inner join B on A.b_id = B.id right outer join C on C.id = B.c_id order by A.id,C.id; +------+------+------+-------+ | a_id | b_id | c_id | name | +------+------+------+-------+ | 1 | 1 | 1 | men | | 1 | 2 | 1 | men | | 1 | 3 | 2 | women | | 2 | 5 | 1 | men | | 2 | 4 | 1 | men | +------+------+------+-------+
補足情報(FW/ツールのバージョンなど)
mysql 5.7を使用しております。
ご教授のほどよろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー