人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

テーブルA、B、Cがあります。テーブルAには10万件のデータ。テーブルBは1万件。テーブルCは5万件のデータがあるとします。各テーブルにはIDというフィールドがあり、このIDで3つのテーブルを結合することが可能です。やりたいことは、クエリを作りたいです。

・条件はテーブルAを基にする。
・まずテーブルBにあるIDは除外する。つまりA-Bを行う。
・かつテーブルAのIDはテーブルCに存在しないといけない。

といたSQLをaccess 2003のクエリで作成したいのですが、作成方法をお願いいたします。

●質問者: akaired
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:access SQL クエリ データ フィールド
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● vegah
●35ポイント

ご指定の条件を元にACCESSでクエリーを作成し、SQL表示にしたものです。

SELECT A.*

FROM (A LEFT JOIN B ON A.ID = B.ID) LEFT JOIN C ON A.ID = C.ID

WHERE (((B.ID) Is Null) AND (Not (C.ID) Is Null));

テーブルAとB,CをIDで結合し、テーブルBではNULLに、テーブルCではNot Nullになるような条件で抽出しました。

◎質問者からの返答

解説頂けると幸いです。なぜこれで条件が満たされるのでしょうか?私の頭が理解できないので、わかりやすく分解して説明頂けると嬉しいです。


2 ● t-wata
●35ポイント

vegahさんの補足です。(コメントだと表を使えないので解答欄に書かせてもらいます)

テーブルA

ID VALUE
1 xxx
2 yyy
3 zzz

テーブルB

ID VALUE
1 aaa

テーブルC

ID VALUE
1 qqq
2 www

とすると、A LEFT JOIN B ON A.ID = B.IDは

A.ID A.VALUE B.ID B.VALUE
1 xxx 1 aaa
2 yyy null null
3 zzz null null

(A LEFT JOIN B ON A.ID = B.ID) LEFT JOIN C ON A.ID = C.IDは、

A.ID A.VALUE B.ID B.VALUE C.ID C.VALUE
1 xxx 1 aaa 1 qqq
2 yyy null null 2 www
3 zzz null null null null

となります。なので、B.IDがnullならテーブルBにIDが無いことになり、C.IDがnullじゃないなら、AにもCにも同じIDが存在しているということになります。

それらの共通部分が求めるものなので、(((B.ID) Is Null) AND (Not (C.ID) Is Null))で上の結合した表を絞り込めばよいことになります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ