・条件はテーブルAを基にする。
・まずテーブルBにあるIDは除外する。つまりA-Bを行う。
・かつテーブルAのIDはテーブルCに存在しないといけない。
といたSQLをaccess 2003のクエリで作成したいのですが、作成方法をお願いいたします。
ご指定の条件を元に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になるような条件で抽出しました。
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))で上の結合した表を絞り込めばよいことになります。
解説頂けると幸いです。なぜこれで条件が満たされるのでしょうか?私の頭が理解できないので、わかりやすく分解して説明頂けると嬉しいです。