Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No153047.複数フィールドの比較、差分を抽出するためのクエリについて

タイトル複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153047
投稿日: 2009/12/11(Fri) 17:15
投稿者: ChinpaN
OS:Win_XP_sp3
Access Version:2003

初めて投稿いたします。
こちらのサイトでは毎度、お世話になり勉強させていただいています。

会社にて取り扱っているサービスについて、
各広告の掲載先からインバウンドされる顧客データの管理をしたいと考えています。
データは数件〜300件/日のペース入ってきており、
Excelから一旦作業テーブルに取込み、Mainテーブルに追加する運用にしようと思っています。

現在考えているテーブル構成は下記のようになっており、
[T_work_名刺管理]と[T_名刺管理]を比較したとき、
1フィールドでもデータの異なるフィールドがあったら、
オートナンバー型の登録IDを振りつつ、[T_名刺管理]へ追加するという動作にできないかと
試行錯誤しているのですが、いずれのフィールドも空白を含んでいるためか、
不一致クエリでは、希望する結果が抽出されず。
過去ログ等検索し、自分なりに検証してみるのですが望む結果に辿り着けず困っています…
ヒントだけでも頂ければ嬉しく思います。
どうかお知恵をお借りできないでしょうか?

●T_work_名刺管理
インバウンド日付   日付/時刻型
インバウンドグループ テキスト型
会社名        テキスト型
担当者氏名      テキスト型
所属部課       テキスト型
役職         テキスト型
メールアドレス    テキスト型
メルマガ不要     Yes/No型
郵便番号       テキスト型
都道府県       テキスト型
住所1         テキスト型
住所2         テキスト型
TEL          テキスト型
FAX          テキスト型
備考         メモ型

●T_名刺管理
登録ID(主キー)   オートナンバー型
インバウンド日付   日付/時刻型
インバウンドグループ テキスト型
会社名        テキスト型
担当者氏名      テキスト型
所属部課       テキスト型
役職         テキスト型
メールアドレス    テキスト型
メルマガ不要     Yes/No型
郵便番号       テキスト型
都道府県       テキスト型
住所1         テキスト型
住所2         テキスト型
TEL          テキスト型
FAX          テキスト型
備考         メモ型

どうぞ、よろしくお願いします。

タイトルRe: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153054
投稿日: 2009/12/12(Sat) 00:13
投稿者: hoya
全て紐付けってフィールド数オーバーかな?

無理なら、紐付けせずに条件指定で出来るかな

タイトルRe^2: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153123
投稿日: 2009/12/14(Mon) 11:09
投稿者: ChinpaN
◆hoyaさん

ご返信、ありがとうございますっ
連絡が遅くなり、すみません。週末はチェックしてなくて…

> 全て紐付けってフィールド数オーバーかな?

「メモ型の備考」以外なら、結合線で結ぶことはできます。
しかし、空白を含むフィールドがあるので、上手く抽出されないようです。

> 無理なら、紐付けせずに条件指定で出来るかな

条件指定ですか…?ごめんなさい。まだまだ未熟なので、条件指定の仕方が分かりません。
具体的にどのような操作をすればよろしいでしょうか?
よろしけばお教えくだされば、嬉しいです。

タイトルRe: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153112
投稿日: 2009/12/14(Mon) 10:16
投稿者: Null
> 試行錯誤しているのですが、いずれのフィールドも空白を含んでいるためか、
この空白(Null)フィールドは、違うレコードと判断するのか、
あるいは判断基準から外す(同じとみなし無視する)のか、
どう判断するのですか?

タイトルRe^2: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153124
投稿日: 2009/12/14(Mon) 11:10
投稿者: ChinpaN
◆Nullさん

> この空白(Null)フィールドは、違うレコードと判断するのか、
> あるいは判断基準から外す(同じとみなし無視する)のか、
> どう判断するのですか?

ご返信、ありがとうございます。
空白は判断基準から外したいと考えています。
空白(Null)のあるフィールドを含め、そのレコードが行単位で一致するのか否かを
判断できればいちばんいいなと思っているのですが。。。

すみません、一点訂正させてください。

>>いずれのフィールドも空白を含んでいるためか、

空白を含むフィールドは「会社名」〜「FAX」のいずれかでした。

タイトルRe^3: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153132
投稿日: 2009/12/14(Mon) 11:48
投稿者: Null
> 空白は判断基準から外したいと考えています。
> 空白(Null)のあるフィールドを含め、そのレコードが行単位で一致するのか否かを
> 判断できればいちばんいいなと思っているのですが。。。
この書き方は、両方とも空白の場合は同じとみなす。ということなのでしょうね?

私が聞きたかったのは、
 片方には入力が有って、もう片方がNullの場合も同じとみなし追加しないのか?
ということなのですが。

多分、二つのテーブルのどちらが空白なのかで判断は違ってくるのだろうな。
とは思いますが、あくまでも推測は推測ですのでね。

ハッキリさせてもらった方が、スレが長くならなくて良いですよね。

タイトルRe^4: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153140
投稿日: 2009/12/14(Mon) 12:50
投稿者: ChinpaN
Nullさん、早速の返信ありがとうございます。

> この書き方は、両方とも空白の場合は同じとみなす。ということなのでしょうね?

そのとおりです。

>  片方には入力が有って、もう片方がNullの場合も同じとみなし追加しないのか?

えーとっ。。。↑のようなパターンの場合には、違うレコードとみなし追加させたいです。

> ハッキリさせてもらった方が、スレが長くならなくて良いですよね。

確認いただいたことに対し、的確な返信ができず申し訳ないです。
上記のような内容でハッキリさせることができているでしょうか…?

ところで、現在はサンプルファイルのアップローダーは無くなってしまっているのでしょうか?
リンクを辿ってみたのですが、Error Code 404 (Wrong page)となってしまいます。
ファイルを見ていただければ伝わりやすいと考えたのですが。。。
それとも別にURLが存在しているのでしょうか?

タイトルRe^5: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153144
投稿日: 2009/12/14(Mon) 13:21
投稿者: Null
> >  片方には入力が有って、もう片方がNullの場合も同じとみなし追加しないのか?
>
> えーとっ。。。↑のようなパターンの場合には、違うレコードとみなし追加させたいです。
>
追加クエリ

INSERT INTO T_名刺管理
SELECT *
FROM T_work_名刺管理 AS T1
WHERE NOT EXISTS (SELECT 0
FROM T_名刺管理
WHERE インバウンド日付 = T1.インバウンド日付 AND
インバウンドグループ = T1.インバウンドグループ AND
Nz(会社名) = Nz(T1.会社名) AND
: 途中省略。
Nz(FAX) = Nz(T1.FAX) AND
Left(Nz(備考), 255) = Left(Nz(T1.備考), 255));
を実行すれば良いと思います。

> ところで、現在はサンプルファイルのアップローダーは無くなってしまっているのでしょうか?
> リンクを辿ってみたのですが、Error Code 404 (Wrong page)となってしまいます。
> ファイルを見ていただければ伝わりやすいと考えたのですが。。。
> それとも別にURLが存在しているのでしょうか?
エロサイト系、偽ブランドサイト系Spam投稿が多くなったので廃止されました。
みんなのAccess備忘録も、一部はログとして残っていますが、同様に廃止されました。
みなさん、ファイルバンクのような無料の共有サイトを利用されています。

タイトルRe^6: 複数フィールドの比較、差分を抽出するためのクエリについて
記事No: 153152
投稿日: 2009/12/14(Mon) 14:55
投稿者: ChinpaN
Nullさん、すごいっ!ありがとうございますっっ
一気に解決しました。
業務の合間に、1週間ほどウンウン悩んでいたのが嘘のようです。

記載いただいたSQLを実際に検証してみたところ、
意図したとおりのレコードを抽出することができました。

> INSERT INTO T_名刺管理
> SELECT *
> FROM T_work_名刺管理 AS T1
> WHERE NOT EXISTS (SELECT 0
> FROM T_名刺管理
> WHERE インバウンド日付 = T1.インバウンド日付 AND
> インバウンドグループ = T1.インバウンドグループ AND
> Nz(会社名) = Nz(T1.会社名) AND
> : 途中省略。
> Nz(FAX) = Nz(T1.FAX) AND
> Left(Nz(備考), 255) = Left(Nz(T1.備考), 255));

EXISTS演算子というサブクエリを作成する要素があるんですね。
クエリって奥が深い。。。
Nz関数の使い方など参考になります。
過去ログやヘルプをひいて、改めて復習&勉強してみたいと思います。

> エロサイト系、偽ブランドサイト系Spam投稿が多くなったので廃止されました。
> みんなのAccess備忘録も、一部はログとして残っていますが、同様に廃止されました。
> みなさん、ファイルバンクのような無料の共有サイトを利用されています。

なるほど。やはりそのような事情でしたか。。。了解です。
またお知恵を拝借したくなった際は、お教えいただいた無料の共有サイトの利用を検討してみます。

お世話になりました。本当に、ありがとうございます!!


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

注目のモンスター専用サーバーからお買い得プランまで幅広くそろえています。cPanel、PLESK、WEBMINまでお任せ下さい。
注目のモンスター専用サーバーからお買い得プランまで幅広い。
cPanel、PLESK、WEBMINまでお任せ下さい。

 

ページの先頭へ 前ページへ戻る