(ACCESS 2000,VB6)

2つのテーブルで日付とコードが両方一致している部分をfull outer joinしたいのですが

select Table1.code,Table1.WDate,Table1.ValueA
from Table1 full outer join Table2
on Table1.Code=Table2.Code and Table1.WDate=Table2.WDate
みたいな書き方をするともちろんエラーになってしまいます
(full outer joinがaccessは使えないため,on 以下の文法がおかしいため)。

full outer joinの代わりにunion を使って
select code,WDate from Table1
full union
select code,WDate from Table2
はわかるのですがjoinの条件式の作成の部分でつまずいてしまいます。
(それからTable.ValueAが結合できていません)
わかる方がいたらご教授願います。

回答の条件
  • 1人1回まで
  • 登録:2008/09/25 14:48:05
  • 終了:2008/09/28 14:36:49

回答(2件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542008/09/25 18:41:18

ポイント20pt

FULL JOINは、LEFT JOIN + RIGHT JOIN + UNIONで代用できます。

ACCESSの環境がないのですが、「ON (条件式)」というように、括弧があちこちで必要だったと思います。

id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012008/09/25 18:47:21

ポイント50pt

Table1 も Table2 もcode, WDate, ValueA というフィールドを持っていて

結果として code, WDate, Table1.ValueA, Table2.ValueA を求めたい場合だとすると・・・。

SELECT Table1.code,Table1.WDate,Table1.ValueA,Table2.ValueA AS ValueB
FROM Table1
    LEFT JOIN Table2 ON Table1.Code=Table2.Code and Table1.WDate=Table2.WDate
UNION ALL
SELECT Table2.code,Table2.WDate,Table1.ValueA,Table2.ValueA
FROM Table1
    RIGHT JOIN Table2 ON Table1.Code=Table2.Code and Table1.WDate=Table2.WDate
WHERE Table1.code Is Null
;

Table1 において code に Nullや空文字列は許可されていないものとして作成して

WHERE 条件をつけています。


※一人一回でコメント欄も使えない設定になっているので、ひとまず以上で失礼します。

  • id:uuuu_mmmm0120
    chuken_kenkouさん>回答サンクスです。どうにか解決しそうです。確かに括弧がやたら多い(笑)

    kn1967さん>on の後に2つ条件書いても良かったんですね。知りませんでした。まあSQLで制御文を極力省こうとするのは結構問題含みかもしれませんね。すごいSQL文になっちゃいました。サンクスです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません