- 締切済み
2つ以上のテーブルの結合
こんにちは。 数年ぶりにプログラムを組むことになりSQLを考えているのですが、たとえば添付画像のように2つのテーブルを1つにまとめた結果を求めるにはどうしたらいいのでしょうか? 空白部はゼロでも空白でも構いません。 実際にはもっと条件や項目が多いのですが、それ以前にこれができず。。。 ご教授お願いいたします。 テーブルA 項目 日付 数1 ---------------- 001 0216 100 001 0217 50 003 0215 60 テーブルB 項目 日付 数2 ---------------- 001 0217 40 002 0216 200 ↓ 項目 日付 数1 数2 ---------------------- 001 0216 100 001 0217 50 40 002 0216 200 003 0215 60
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ngwave
- ベストアンサー率27% (23/84)
1です。 full outer 使えるSQLなら、full outerでOK でも、結構使えないのがあるので、その場合は、 left で軸変えて両側から取るか、 left と right使うかして、 unionして下さい。 いい図があったので、リンク貼っておきます。 http://i.stack.imgur.com/udQpD.jpg
FULL OUTER JOIN を使います。 SELECT COALESCE(a.項目, b.項目), COALESCE(a.日付, b.日付), a.数1, b.数2 FROM テーブルA AS a FULL OUTER JOIN テーブルB AS b ON b.項目 = a.項目 AND b.日付 = a.日付
お礼
FULL OUTER JOINってのがあるんですね、知りませんでした。 COALESCEも知りませんでした。調べてみます。 ありがとうございました。
- ngwave
- ベストアンサー率27% (23/84)
どっちかのTBLのレコードを基準にするのではなく、 どちらかにあれば、つまり、すべてのレコードを拾うパターンのヤツですよね。 それは一手間いります。 まず、どちらかのテーブルを軸に(left join)して、全件求めます。 次に、逆側のテーブルを軸に(left join)して、where句で、joinテーブルのキーがnullのものを求めます。 その2つを統合(union)します。 Aのデータと、BからAを除いたデータをガッチャンコです。
お礼
早速のご回答ありがとうございます。 やはり手間かかりますよね。。。 お教えいただいた内容で試してみます。 ありがとうございました。
お礼
ngwaveさん、図のほうありがとうございます。 実際には4つ以上のテーブルを集計しながら結合するのでどうするのがよいのか判りませんが、left join + union と full outer いろいろ組み合わせて試してみようと思います。 ありがとうございました。