こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

表の結合について

2つのテーブルがあります。(それぞれNo列が主キーです)

表A(名称:Tbl_A)に2レコードあります。
No, Str  ←列名
10,str_1  ←データ
20,str_2  ←データ

表B(名称:Tbl_B)に2レコードあります。
No, Name  ←列名
10,Name_1 ←データ
30,Name_3 ←データ


このテーブルを結合して、以下のデータ(3レコード)を抽出するSQL文を教えてください。

No, Str, Name   ←列名
10,str_1,Name_1 ←データ
20,str_2,(null) ←データ
30,(null),Name_3 ←データ


ポイントは、「どちらかの表にあるデータは全て抽出したい」ということです。
よろしくお願いします。

投稿日時 - 2005-04-14 22:59:31

QNo.1331604

すぐに回答ほしいです

質問者が選んだベストアンサー

幹を作って、外部結合。

select a.no,b.str,c.name
from
(select no from tbl_a union select no from tbl_b) a,
tbl_a b,
tbl_b c
where a.no=b.no(+) and a.no=c.no(+)
;

投稿日時 - 2005-04-14 23:14:55

お礼

ありがとうございました。
この方法で実現することができました。

投稿日時 - 2005-04-15 23:04:05

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

select Tbl_A.No, Str, Name from Tbl_A, Tbl_B where Tbl_A.No = Tbl_B.No(+)
union
select Tbl_B.No, Str, Name from Tbl_A, Tbl_B where Tbl_A.No(+) = Tbl_B.No;

でも可能です。

投稿日時 - 2005-04-15 14:20:51

お礼

回答ありがとうございます。
この方法でもOKですよね。参考になりました。

投稿日時 - 2005-04-15 23:10:36

ANo.4

jmh

SELECT * FROM tbl_a FULL OUTER JOIN tbl_b ON (tbl_a.no = tbl_b.no)

投稿日時 - 2005-04-15 05:50:07

お礼

回答ありがとうございます。
ただこの方法では、No列が2つできてしまうようでした。

投稿日時 - 2005-04-15 23:06:27

ANo.3

>#2
>ほとんどの市販の参考書にでていますので、一冊買われる事をお勧めいたします。
貴殿も読んだ方がよい。
というか、質問内容を良く読んだ方がよい。


質問の回答ですが..

外部結合以外にも、幾つかの解決法が考えられます。
ただし、効率的にどれを選択すべきかは、実行計画で確認し、適切なモノを
選択してください。

例えば、

8i以降のインラインビューを使ってみる。
SELECT
A.NO,
(SELECT B.STR FROM TBL_A B WHERE A.NO=B.NO) STR,
(SELECT C.NAME FROM TBL_B C WHERE A.NO=C.NO) NAME
FROM
(SELECT NO FROM TBL_A UNION SELECT NO FROM TBL_B)

集計関数で勝負してみる。

SELECT NO,MAX(STR) STR,MAX(NAME) NAME
FROM
(SELECT NO,STR,NULL AS NAME FROM TBL_A UNION SELECT NO,NULL,NAME FROM TBL_B)
GROUP BY NO

といったカンジで、いろいろな解決法が存在します。

投稿日時 - 2005-04-14 23:57:24

お礼

実現させる為にはいろいろな考え方ができるのですねー。
大変参考になりました。ありがとうございます。

投稿日時 - 2005-04-15 23:12:40

ANo.2

Select Tbl_A.No,Tbl_A.Str,Tbl_B.Name From Tbl_A,Tbl_B Where Tbl_A.No = Tbl_B.No
です。
このあたりはどのSQLでもほとんどかわりません。
ほとんどの市販の参考書にでていますので、一冊買われる事をお勧めいたします。

投稿日時 - 2005-04-14 23:20:19

お礼

回答ありがとうございました。
ただ、この方法では両方の表にデータが存在するキーのみ抽出してしまいます。

今回は単純な外部結合だと、どちらかの表に存在するデータしか抽出できなかったので質問させていただきました。
質問ポイントの説明不足だったのかもしれませんね。すみませんでした。

投稿日時 - 2005-04-15 23:18:17

あなたにオススメの質問