質問: テーブルのマージsqlに関して 初歩的なsqlの質問で申し訳ありません。 以前にも同じような内容で投稿させて頂きましたが、教えて下さい。 下記のような、ある異なる名前の同項目を持つ2つのテーブルが存在します。 《テーブル》 aテーブル 社員番号、日付、内容、所属、時間、結果 bテーブル 社員番号、日付、内容、理由 ※ 内容に関しては、aテーブルとbテーブルで全く違います。 これらの2つのテーブルをマージさせ、社員番号毎の内容毎、日付順に したいと考えています。 以前に以下のようなunionを教えてもらいましたが、所属、時間、結果、理由という 項目全てを出力するとした場合、どのように記載すれば良いでしょうか? unionの場合、項目が異なるとエラーとなってしまうかと、、、 《unionのsql》 select * from ( select 社員番号, 日付, 内容 from aテーブル union select 社員番号, 日付, 内容 from bテーブル ) order by 日付, 社員番号, 内容 教えて下さい。 よろしくお願いします。
回答: 存在しない項目にnullを設定すればunionすることができます。 select 社員番号, 日付, 内容, 所属, 時間, 結果 from aテーブル union select 社員番号, 日付, 内容, null, null, null from bテーブル order by 社員番号, 内容, 日付; もし、それぞれのテーブルが社員番号と日付で一意になり、それらのデータは1行にしたいということであれば完全外部結合してもいいと思います。 select nvl(a.社員番号, b.社員番号) as 社員番号, nvl(a.日付, b.日付) as 日付, a.内容 as a内容, b.内容 as b内容, a.所属, a.時間, a.結果 from aテーブル a full outer join bテーブル b on (a.社員番号 = b.社員番号 and a.日付 = b.日付) order by 社員番号, a.内容, b.内容, 日付; みたいな感じです。