電子書籍の厳選無料作品が豊富!

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 ←データ


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

A 回答 (5件)

幹を作って、外部結合。



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(+)
;
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 23:04

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;

でも可能です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 23:10

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

)
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 23:06

>#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

といったカンジで、いろいろな解決法が存在します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/15 23:12

Select Tbl_A.No,Tbl_A.Str,Tbl_B.Name From Tbl_A,Tbl_B Where Tbl_A.No = Tbl_B.No


です。
このあたりはどのSQLでもほとんどかわりません。
ほとんどの市販の参考書にでていますので、一冊買われる事をお勧めいたします。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2005/04/15 23:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!