- ベストアンサー
JOINの方法について
毎度お世話になっております。 以下のテーブル1、テーブル2があります。 [テーブル1] CODE 1月 2月 A 10 10 C 30 30 [テーブル2] CODE 3月 4月 A 10 10 B 20 20 D 40 40 これを以下のようにくっつけたいのです。 [希望する結果] CODE 1月 2月 3月 4月 A 10 10 10 10 B 20 20 C 30 30 D 40 40 クエリ1(テーブル1 LEFT JOIN テーブル2とする)と、 クエリ2(テーブル2 LEFT JOIN テーブル1とする)を作り、 UNIONでくっつける方法を考え、希望した結果は得られましたが、 もっとスマートな方法(一つのクエリでできるような方法)が あればご教授ください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一応別解です。スマートかどうかは。。 SELECT CODE,MAX(1月),MAX(2月),MAX(3月),MAX(4月) FROM (SELECT CODE, 1月, 2月, null AS 3月, null AS 4月 FROM テーブル1 UNION ALL SELECT CODE, null, null, 3月, 4月 FROM テーブル2) tmp GROUP BY CODE
その他の回答 (3)
- keirika
- ベストアンサー率42% (279/658)
SELECT テーブル1.CODE, テーブル1.[1月], テーブル1.[2月], テーブル2.[3月], テーブル2.[4月] FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.CODE = テーブル2.CODE UNION SELECT テーブル2.CODE, テーブル1.[1月], テーブル1.[2月], テーブル2.[3月], テーブル2.[4月] FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.CODE = テーブル2.CODE でどうでしょう。
お礼
回答ありがとうございます。 UNIONクエリにSELECT文を纏めてしまうのですね。 RIGHT JOIN は今まで使用したことがありませんでしたが 勉強してみます。 ありがとうございました。
- CHRONOS_0
- ベストアンサー率54% (457/838)
Accessならアップされた方法がベストです
お礼
回答ありがとうございます。 今回もお世話になります。 >Accessならアップされた方法がベストです 初心者・独学の私にはとても自信になりました。 ありがとうございました。
- chukenkenkou
- ベストアンサー率43% (833/1926)
RDBMS名とバージョンは何ですか? FULL OUTER JOINで実現できますが、未実装のRDBMSがあります。
補足
回答ありがとうございます。 >RDBMS名とバージョンは何ですか? 失礼しました。ACCESS2003を使用しています。 よろしくお願いします。
お礼
回答ありがとうございます。 今回もお世話になります。 NULLの列を作り、UNIONでくっつける方法もあるのですね。 勉強になります。 ありがとうございました。