• 締切済み

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

みんなの回答

  • ngwave
  • ベストアンサー率27% (23/84)
回答No.3

1です。 full outer 使えるSQLなら、full outerでOK でも、結構使えないのがあるので、その場合は、 left で軸変えて両側から取るか、 left と right使うかして、 unionして下さい。 いい図があったので、リンク貼っておきます。 http://i.stack.imgur.com/udQpD.jpg

silk_001
質問者

お礼

ngwaveさん、図のほうありがとうございます。 実際には4つ以上のテーブルを集計しながら結合するのでどうするのがよいのか判りませんが、left join + union と full outer いろいろ組み合わせて試してみようと思います。 ありがとうございました。

noname#212058
noname#212058
回答No.2

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.日付

silk_001
質問者

お礼

FULL OUTER JOINってのがあるんですね、知りませんでした。 COALESCEも知りませんでした。調べてみます。 ありがとうございました。

  • ngwave
  • ベストアンサー率27% (23/84)
回答No.1

どっちかのTBLのレコードを基準にするのではなく、 どちらかにあれば、つまり、すべてのレコードを拾うパターンのヤツですよね。 それは一手間いります。 まず、どちらかのテーブルを軸に(left join)して、全件求めます。 次に、逆側のテーブルを軸に(left join)して、where句で、joinテーブルのキーがnullのものを求めます。 その2つを統合(union)します。 Aのデータと、BからAを除いたデータをガッチャンコです。

silk_001
質問者

お礼

早速のご回答ありがとうございます。 やはり手間かかりますよね。。。 お教えいただいた内容で試してみます。 ありがとうございました。

関連するQ&A