@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

left joinを使用したSQL文

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-04-07 20:37
ここで聞いて良いかわからないのですが、データベースに関する会議室が無いので
ここで質問させてください。
C#からACCESSのデータをOLEで取得しています。tbl1とtble2から列aで表をリンクして
データを取得しようとしています。

tbl1
a bb ccc
--------
2 22 222
3 33 333
4 44 444

tbl2
a dddd
-----
1 1111
2 2222
3 3333

取得したいデータ
a bb ccc dddd
-------------
1 null null 1111
2 22 222 2222
3 33 333 3333
4 44 444 null

現在は、left joinを使って以下の二つのSQL文を発行してデータを取得し、
ArraList等に保存し、重複をはぶいて新たにArrayListに設定しています。

select tbl1.a,bb,ccc,dddd from tbl1 left join tbl2 on tbl1.a=tbl2.a;
取得したデータ
a bb ccc dddd
-------------
2 22 222 2222
3 33 333 3333
4 44 444 null
select tbl2.a,bb,ccc,dddd from tbl2 left join tbl1 on tbl1.a=tbl2.a;
取得したデータ
a bb ccc dddd
-------------
1 null null 1111
2 22 222 2222
3 33 333 3333

この二つのSQL文を一つで出来ないでしょうか?
Cluster
ぬし
会議室デビュー日: 2003/03/06
投稿数: 289
お住まい・勤務地: 大阪
投稿日時: 2004-04-07 21:05
UNION ですね。
「UNION」でヘルプを調べると分かると思います。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-04-08 10:55
Clusterさん、ありがとうございます。
UNIONですか。聞いた事はありましたが、意味は知りませんでした。

select tbl1.a,bb,ccc,dddd from tbl1 left join tbl2 on tbl1.a=tbl2.a
union
select tbl2.a,bb,ccc,dddd from tbl2 left join tbl1 on tbl1.a=tbl2.a;

こんな感じで一つのSQL文で取得する事ができました。

例えば、

tbl1
a bb ccc
--------
2 22 222
3 33 333
3 33 333
4 44 444

このように重複しているデータも省いてくれるのですね。これは助かります。

select tbl1.a,bb,ccc,dddd from tbl1 left join tbl2 on tbl1.a=tbl2.a

これでgroup byが設定出来なくて困っていたところでしたから。

ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-08 11:40
 条件文を見ると、FULL OUTER JOINのような?

select tbl1.a,bb,ccc,dddd from tbl1 natural full outer join tbl2;


*Accessで使えるかどうかは不明

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-04-08 11:41 ]
おけら
会議室デビュー日: 2002/12/24
投稿数: 13
お住まい・勤務地: 両さんのいる交番の近く
投稿日時: 2004-04-08 12:46
Access に Full Outer Join はないと思います。
97/2000 ではムリでしたので。
2002は使ったことないのでわかりません。あしからず。

引用:

Jittaさんの書き込み (2004-04-08 11:40) より:
 条件文を見ると、FULL OUTER JOINのような?
select tbl1.a,bb,ccc,dddd from tbl1 natural full outer join tbl2;
*Accessで使えるかどうかは不明



>このように重複しているデータも省いてくれるのですね。これは助かります。
一応、Union Select All を使うと重複分の出力も可能です。

それはそうと、DBの会議室、欲しいですね。


[ メッセージ編集済み 編集者: おけら 編集日時 2004-04-08 12:49 ]
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-04-08 13:48
Jittaさん、おけらさん、ありがとうございます。

ACCESS2003でfull outer join試してみましたが、残念ながら駄目でした。

他で使用できそうです。勉強になりました。ありがとうございました。

> それはそうと、DBの会議室、欲しいですね。
そうですね。欲しいですね。是非作っていただきたいです。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-04-08 14:50
引用:

>このように重複しているデータも省いてくれるのですね。これは助かります。
一応、Union Select All を使うと重複分の出力も可能です。



UNIONは結果セットが肥大化した際に急激なパフォーマンス悪化を伴う場合がありますので、重複行排除の必要が無い場合はUNION ALLの使用をお勧めします。

引用:

それはそうと、DBの会議室、欲しいですね。



「(R)DB・SQL」と「HTML・JavaScript」はよく迷子になっていますねー。欲しいです。
1

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