• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2つのACCESSファイルのテーブルを比較する方法)

2つのACCESSファイルのテーブルを比較する方法

naoto0216の回答

  • naoto0216
  • ベストアンサー率46% (183/391)
回答No.9

>選択クエリウィサードの2ページ目の画面で >次へボタンをクリックすると、 >下記のダイアログが表示されて >ここから先に進められないのですが? ウィザードから作れないのであれば、デザインから やってみて下さい。そっちの方が簡単かも。 作成⇒クエリデザイン を開きます。 追加するテーブルはテーブル1、テーブル11 の 二つです。 で、前回回答したように各フィールドを紐付けします。 テーブル1    テーブル11 ID  ------------ID フィールド1-------フィールド1 フィールド2-------フィールド2 ※クエリデザインの画面上で、テーブル1のIDをドラッグしたまま  テーブル11のIDにひっぱれば紐付きます。 で、テーブル1のID、フィールド1、フィールド2を 表示させるようにして下さい(IDだけでもよいです)。 そうすると、ID1だけが抽出されると思います。 ※ID2はそれぞれのテーブルでフィールド2の値が異なるので  抽出されません。 まずはここまで出来るかやってみて下さい。

yam2012
質問者

補足

回答ありがとうございます。 >まずはここまで出来るかやってみて下さい。 ここまで出来ました。 一致しているレコード(ID=1)だけが抽出されました。 ---SQLコード--- SELECT [テーブル1].*, [テーブル11].* FROM テーブル1 INNER JOIN テーブル11 ON ([テーブル1].ID = [テーブル11].ID) AND ([テーブル1].[フィールド1] = [テーブル11].[フィールド1]) AND ([テーブル1].[フィールド2] = [テーブル11].[フィールド2]); --------------- 回答No.7の分かりやすい説明で、こちらも出来ました。 一致していないレコード(ID=2)だけが抽出されました。 (不一致のレコードが正しく抽出されている) ---SQLコード--- SELECT [テーブル1].ID, [テーブル1].[フィールド1], [テーブル1].[フィールド2], [クエリ1].[テーブル11].ID, [クエリ1].[テーブル11].[フィールド1], [クエリ1].[テーブル11].[フィールド2] FROM テーブル1 LEFT JOIN クエリ1 ON ([テーブル1].[フィールド2] = [クエリ1].[テーブル1].[フィールド2]) AND ([テーブル1].[フィールド1] = [クエリ1].[テーブル1].[フィールド1]) AND ([テーブル1].ID = [クエリ1].[テーブル1].ID) WHERE ((([クエリ1].[テーブル11].ID) Is Null)); --------------- 以上のことを整理すると、 2つのテーブルのレコード数、フィールド数が同じ場合は、 (1) まず、1つ目のテーブルに、2つのテーブルを、   全フィールドが等しい条件で内部結合する。   この結果、   全フィールドが一致しているレコードのみが抽出される。 (2) 次に、1つ目のテーブルに、先ほど内部結合したテーブルを、   全フィールドが等しい条件(*1)で左結合する。   この結果、一致していないレコードの2つ目のテーブルの   全フィールドの値はNullになっているので、   2つ目のテーブルのどれかのフィールドの値が   Nullのレコードを抽出すれば、   一致していないレコードのみが抽出される。   (*1)サンプルのテーブルではIDが一意なので     IDフィールドが等しい条件のみでも可 これで一見正しいように思えるのですが 今回のテスト用のテーブル1ではなく、 実際の大きなテーブルで確認してみると、 (accdbファイルをコピーして同じテーブルで確認) (1)で一部のレコードが抽出されていません。 (つまり一致していないレコードがあるようです) そのうちの1つのレコードについて、 両テーブルのこのレコードを調べても違いが見当たりません。 つまり、一致しているはずなのに抽出されていないようなのです。 実は、回答No5を頂いた時に、 >例に書かれているケースなら、 >フィールド2同士を紐付けなければなりません。 のようにしてみたら正しく検出されたので、 すべてのフィールド同士を紐付けて確認をしていたのですが、 今回とまったく同じ現象に陥っていました。 以下にこの時の具体的な手順を示しておきます。 回答No1の補足コメントの(1)~(8)の手順の後、 (9) クエリのデザインを編集するを選択して完了ボタン (10) デザインビューが表示されて、    テーブル1のIDとテーブル11のIDが--->で結線されている。 (11) 同様に、    テーブル1のフィールド1とテーブル11のフィールド1、    テーブル1のフィールド2とテーブル11のフィールド2    を各々--->で結線する。 (12) この時のSQL式は、 --------------------- SELECT [テーブル1].ID, [テーブル1].[フィールド1], [テーブル1].[フィールド2], [テーブル11].ID, [テーブル11].[フィールド1], [テーブル11].[フィールド2] FROM テーブル1 LEFT JOIN テーブル11 ON ([テーブル1].[フィールド2] = [テーブル11].[フィールド2]) AND ([テーブル1].[フィールド1] = [テーブル11].[フィールド1]) AND ([テーブル1].[ID] = [テーブル11].[ID]) WHERE ((([テーブル11].ID) Is Null)); ---------------------    となっている。 (13) 実行すると不一致のレコードが表示される。    (不一致のレコードが正しく抽出されている) 以上のことを整理すると、 テーブル1に、テーブル11を、 全フィールドが等しい条件で左結合する。 この結果、全フィールドが一致しているレコードの テーブル11の全フィールドはNullではない。 一方、少なくとも1つのフィールドが一致していない レコードのテーブル11の全フィールドはNullになっている。 テーブル11のIDがNullのレコードのみを抽出すれば、 一致していないレコードのみが抽出される。 これで一見正しいように思えるのですが、 今回のテスト用のテーブル1ではなく、 実際のテーブルで確認をしてみると (accdbファイルをコピーして同じテーブルで確認) 一部のレコードが抽出されています。 (つまり一致していないレコードがあるのです) そのうちの1つのレコードについて、 両テーブルのこのレコードを調べても違いが見当たりません。 つまり、一致しているはずなのに抽出されているのです。 これらの原因が分かりますでしょうか。 よろしくお願いします。

関連するQ&A

  • エクセルのデータをアクセスのテーブルに移動入力する

    エクセルのデータをアクセスのテーブルに移動入力するVBA フォルダAにおいて、a1.xlsxというファイルがあり、 そのsheet1のセル(a,1)=1 A1が1 とします その値をアクセスのデータベース(これもフォルダAにあります)  b.accdbのテーブル1の フィールド1に入力したいときの エクセルマクロのVBAを御教示いただけると助かります さらに続けて フォルダAにおいて、a2.xlsxというファイルがあり、 そのsheet1のセル(a,1)=2 A1が2 とします その値をアクセスのデータベース上記と同じ  b.accdbのテーブル1の フィールド1に追加で入力したいときの エクセルマクロのVBA 以上わかると助かります よろしくお願いします win10 office365

  • これはアクセスファイルが壊れたという事でしょうか?

    ファイルを開こうとしたら、 'Id'は、このテーブルのインデックスではありません。 'ParentIdName'は、このテーブルのインデックスではありません。 と言うメッセージが消しても消しても出ます。 30回くらい消したらファイルが閉じます。 何回やっても同じ動作です。 新規に、新規 Microsoft Access データベース.accdbを作り リンクテーブルをしようとしても、同じメッセージが出てリンクできません。 もう二度とこのファイルは開けないのでしょうか? アクセス2010です。

  • AccessとSqlServerのテーブルリンク

    Access2007とSqlServer2008を使用しています。 Accessで作成したテーブルを「データベースツール」-「データの移動」でSqlServerに移行してリンクする際、 (1)SqlServerに新規にデータベースを作成すると、リンクテーブルマネージャから見てもリンク先DBが正しく表示されますが、 (2)その後、その既存DBに同じAccess内の別のテーブルを、「データベースツール」-「データの移動」してリンクしたものは、リンクテーブルマネージャから見てもリンク先DBが ()となっており表示されていません。 ツールとしてSqlServer Management Studioを使っていますが、そこからでも(1)のテーブルは表示されていますが、(2)のテーブルは表示されません。 でもリンクはできているようなのです。 また、SqlServer Management Studioを使って、SqlServer内に新規テーブルを作成し、 それをAccessからリンクしようとしても、テーブルリンク一覧内に表示されない状態です。 (「外部データ」-「ODBCデータベース」…)にて SqlServerのファイルデータソースを表示しています) (2)のテーブルはSqlServer Management Studioから見ることができないため、更新・削除もできず困っています。 DB、テーブル、リンク方法等、何か問題があるのでしょうか? よろしくお願いします。

  • ACCESS 同時使用の場合のファイルの扱い

    現在ネットワーク上に、下記の3つのデータベースを作成いたしました。 「データ.accdb」・・・データ蓄積用(CMSで取り込んだデータ1件毎に対して「入力.accdb」から追加入力) 「入力.accdb」・・・「データ.accdb」にデータを入力用(「データ.accdb」へリンクテーブル) 「閲覧.accdb」・・・「データ.accdb」を閲覧用(「データ.accdb」へリンクテーブル) 「入力.accdb」と「閲覧.accdb」では、起動時のメニュー項目が異なるため、別々のデータベースしています。 運用開始の際に、ユーザーには「入力.accdb」または「閲覧.accdb」のどちらかを使用していただくのですが、ネットワーク上にある、この2つのデータベースを使用する方法として、ネットワーク上のデータベースへのショートカットを各PC(ディスクトップ)に作成して使って頂くのと、ネットワーク上のデータベースをコピーして、使用して頂くのでは、どちが良いのでしょうか。 ユーザーは多くて同時に利用は入力用は15名 閲覧用は、30名程度を予定しており、 環境は全員同じくWIN7のACCESS2010です。 アドバイス宜しくお願いいたします。 ※一度質問させて頂きましたタイトル・内容に不備があり、削除し再度質問させていただきました。

  • Access2007のファイル削除

    Access2007を参考書を手に独学しています。 データベースファイル(△△・・・△.accdb)を作成しましたが、削除する方法がわかりません。データベースファイルの削除方法を教えてください。 もう少し具体的に説明しますと・・・ 学習の過程でデータベースファイルを作ったのですが、都合が悪くなって削除したくなりました。しかしAccess2007ではExcelのようにメニューバーに「ファイル(F)」というメニューがありません。 そこでOSの機能を使って直接削除をしました。 ところが削除したにもかかわらずAccessの初期画面では「最近使用したデータベースを開く」という場所に削除したはずのデータベース名が表示されるではありませんか。 無論これをクリックしてもエラーになります。 これを削除する方法を教えてください。よろしくお願いします。

  • アクセス インポートかファイル形式を変えたい

    壊れたアクセスファイルの中身を 新規 Microsoft Access データベース.accdbにインポートするには? 今まで開けてたのに、いきなり開けなくなった、壊れたアクセスファイルがあります。 どうしても開けないので、 新規 Microsoft Access データベース.accdb を作りそこにインポートしようとしたら、 「データベースの形式を認識できません」 となり、インポートできません。 mdb形式なのが原因なのでしょうか? win7、オフィス2010ですが、いままでmdb形式で使えてましたが Windows Updateをしたら、使えなくなりました。 mdb形式が原因なら中身はそのままで壊れたファイルをaccdbに変えたいのですが どうすればいいですか? よろしくお願いします。

  • ACCESSのテーブルを削除した後のファイルサイズ

    ACCESS2002のテーブルをいくつか削除しました。削除後に「ファイル」「データベースプロパティ」でサイズを見ると削除前と変わりません。 データを削除すると当然サイズが小さくなると思ったのですが、変わりませんでした。 「ツール」「データベールユーティリティ」「最適化/修復」をするとサイズが小さくなりました。 WordやExcelなどと違って「最適化/修復」をしないとファイルサイズは小さくならないのでしょうか? また「最適化/修復」は具体的にどんな時に使うものでしょうか?

  • ACCESSでリンクテーブルを自動的に作る方法

    ACCESS2000のデータベースが2つあって、片方のキャンペーンテーブルが2ヵ月に1度くらい随時増えていくので、もう片方のデータベースにそれに応じてリンクテーブルを自動的に増やしていく仕組みを作りたいと思っております。どなたかACCESS+VBAで良い書き方をご存知の方いらっしゃいましたら教えてください。よろしくお願いします。

  • テーブルリンクは途切れてしまいますか?

    アクセスです。 test1.accdbのテーブルをtest2.accdbへテーブルリンクしているのですが 元ファイルのtest1.accdbのファイル名を「新test1.accdb」の様に、変更した場合、テーブルリンクは途切れてしまいますか? また一つ一つ付け直ししないとだめですか?

  • oracle 7.3のアクセス権限

    パスとユーザー名が書かれたテーブルがあったとして、 それが一致するものだけ、他のデータを閲覧できるようにしたいのです。 テーブル上のデータはみられたくあ 上手くviewやアクセス権限を操作してパスとユーザーを一致させる方法はないでしょうか? 接続方法はVBAからoo4oを用いています。オラクルのアカウントは一つです。 select countのみ許可とかできればいいのですが、それは無理でしょうか? データベース初心者ですが宜しくお願いします。