プロが教える店舗&オフィスのセキュリティ対策術

質問です。

現在、accessにて不一致クエリを使用し、テーブルAをチェックし、
マスタテーブルに無い情報が書かれてしまっているフィールドがある場合
抽出して確認をする、というクエリを作りたいと考えています。

不一致クエリにて自動で入る「is null」を使用すると
マスタテーブルに無い事が書いてあるレコードは抽出するのですが
(逆になぜis nullで相違するレコードが抽出されるのか理解に苦しんでもいるのですが)
is nullですので、nullのレコードも抽出されてしまいます。

抽出条件として、マスタテーブルと相違するもの&nullは抽出しない、としたいのですがお知恵を拝借出来ませんでしょうか。
よろしくお願いいたします。

A 回答 (1件)

私は不一致クエリウィザードって使ったことないので、以下想像が入っています。



まず、なぜ「is null」かという話であれば、これはまさに、相手のレコードがないものを探しているからです。
テーブルAフィールド1の内容と、テーブルBフィールド1の内容を比べるとします。次にこれでたとえば「テーブルAのすべてのレコードと・・・・」というクエリを作るとします(つまりクエリビルダでみると矢印でフィールドをつなぐやりかた)。テーブルAのすべてのレコードが表示されますが、テーブルBに該当するレコードがなければ、そのテーブルBのフィールドがNullで返ってきます。
そのNullのレコードを探すから、「is null」の条件が入ります。

次にもともとNullのレコードは除外したいというのであれば、いくつか方法があります。
まず、その不一致クエリにテーブルをそのまま使わずに、テーブルから当該フィールドの値がNullであるレコードを除外するクエリで不一致クエリをつくることです。ですから2段階にクエリを作ることになります
あるいは、もとのテーブルで、Nullを別の値に置き換えてしまうのものひとつの手です。何かの文字や数値で都合が悪ければempty値にしておけばいいでしょう。以後の入力でもNullを許さないような入力画面を作るとなおよいわけです。
または、IsNullの評価を別のフィールドでするとか。主キーのように必ず値をもっているフィールドがあれば、そこでIsNullの評価をすれば、もともとNullということはないですね。
    • good
    • 0
この回答へのお礼

わかりやすい回答ありがとうございました。

(1)is nullはフィールドではなく、「戻り値」がnullであるかどうかを判定
(2)要件を満たすにはクエリを2種使い分ければ良い

このお答えのおかげで、nullフィールドを含んだクエリから
さらにis not nullで絞り込めば良いという回答に行き当たりました。

残念ながらフィールドにはnullにemptyや0といった代替文字列を使用出来ませんでしたので以上の段階式の仕様で行くことにします。

お礼日時:2010/01/30 19:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す