- PR -

left joinを使ったSQL文について

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-12-15 20:25
Windows 2000 + MySQL4.0.18でアプリケーションを作成しています。

SQL文をどのように実行すれば良いか質問させてください。

以下のようなテーブル構成があります。

create table tbl1(
tbl1_id integer,
name1 varchar(128),
tbl2_id integer);

insert into tbl1 values (1, '山田', 1);
insert into tbl1 values (2, '佐藤', 2);
insert into tbl1 values (3, '鈴木', 3);
insert into tbl1 values (4, '池田', null);

create table tbl2(
tbl2_id integer,
tel varchar(128));

insert into tbl2 values (1, '052-111-xxxx');
insert into tbl2 values (2, '052-222-xxxx');
insert into tbl2 values (3, '052-333-xxxx');

create table tbl3(
tbl3_id integer,
tbl2_id integer,
mail varchar(128));

insert into tbl3 values (1, 1, 'yamada@test.com');
insert into tbl3 values (2, 2, 'sato@test.com');

で、以下のような結果を得ようとしています。

山田 052-111-xxxx yamada@test.com
佐藤 052-222-xxxx sato@test.com
鈴木 052-333-xxxx NULL
池田 NULL NULL

以下のようなSQL文を考えましたが、データを思うように得る事が出来ませんでした。

select name1,tel,mail from tbl1 left join (tbl2 left join tbl3 on tbl2.tbl2_id=tbl3.tbl2_id) on tbl1.tbl2_id=tbl2.tbl2_id

得られた結果
山田 052-111-xxxx yamada@test.com
佐藤 052-111-xxxx NULL
鈴木 052-111-xxxx NULL
池田 052-111-xxxx NULL
山田 052-222-xxxx NULL
佐藤 052-222-xxxx sato@test.com
鈴木 052-222-xxxx NULL
池田 052-222-xxxx NULL
山田 052-333-xxxx NULL
佐藤 052-333-xxxx NULL
鈴木 052-333-xxxx NULL
池田 052-333-xxxx NULL

めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2004-12-16 08:27
引用:

kojiさんの書き込み (2004-12-15 20:25) より:

以下のようなSQL文を考えましたが、データを思うように得る事が出来ませんでした。

select name1,tel,mail from tbl1 left join (tbl2 left join tbl3 on tbl2.tbl2_id=tbl3.tbl2_id) on tbl1.tbl2_id=tbl2.tbl2_id



PostgreSQLでは、これで問題ありませんでしたが、

MySQLだと
select name1,tel,mail from tbl1 left join tbl2 on (tbl1.tbl2_id=tbl2.tbl2_id)
left join tbl3 on (tbl2.tbl2_id=tbl3.tbl2_id);
でしょうか。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-12-16 10:39
めぐさん、ありがとうございます!

思ったデータを取得する事が出来ました。
PostgreSQLではうまくいくのですね。微妙にSQLが違うんですね。
勉強になりました。ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)