• ベストアンサー

ACCESSテーブル2つのデータの比較について

アクセステーブル2つのデータ比較について質問があります、 宜しくお願いいたします。 Access, Excel, VBは初心者レベルです。 TableA,TableBというフォーマットが同じなテーブルがあり、 データが同じかを比較をし、どちらかのテーブルにないエントリーが ある場合はそれを出したいと思います。 途中まで出来たのですが、uniqueではないデータがある為に正確な情報がでません。 具体的には: TableA        | TableB Field1 Field2 | Field1 Field2 AAA 10 | AAA 10 BBB 100 | BBB 100 CCC 200 | CCC 200 CCC 200 | EEE 100 DDD 100 | 希望の答えは Field1 Field2 Field3 CCC 200 NotInB <--- これがでません DDD 100   NotInB  <--- これはだせました EEE 100 NotInA  <--- これもだせました 以下のようなものを書いたのですが、CCCのエントリーがTableBに 一件あるので件数が違うにもかかわらずひけませんでした。 SELECT TableA.*, "NotInB" as Field3 FROM TableA LEFT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableB.Field1 Is Null; UNION ALL SELECT TableA.*, "NotInB" as Field3 FROM TableA RIGHT JOIN TableB ON (TableA.Field1=TableB.Field1) AND (TableA.Field2=TableB.Field2) WHERE TableA.Field1 Is Null; 一致したらフラグを立てて、再チェックしないようにすればいいのだと思うのですが、アクセスのクエリ、VBなどでどのようにすればできますか?  もしくはアクセスからxlsなどに落としてから、ファイルの状態で比較 (会社で使うので外部ソフト等が使えません) をVBでするといった方法を検討した方がいいのでしょうか? 色々調べてみたのですが、どっちもやり方が分からないので、 それはそもそも出来ないよなどの アドバイスもございましたら、どうぞ宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

uniqueでないデータ同士の比較はかなり難しい事だと思います。 まずuniqueにしてからの方が良いのではないでしょうか。 と言うことで以下のSQLを考えてみました。 SELECT TableA.Field1, TableA.Field2, Count(*) AS KensuA FROM TableA GROUP BY TableA.Field1, TableA.Field2 UNION ALL ( SELECT TableB.Field1, TableB.Field2, Count(*)*-1 AS KensuB FROM TableB GROUP BY TableB.Field1, TableB.Field2 ) これでField1とField2の組み合わせでuniqueにしたものを合わせています。ただ、Bの方の件数はマイナスにしていますので、このSQLの結果 をさらに件数で集計するとプラスはAのみに存在し、マイナスはBのみ に存在、ゼロは一致になります。 上記のSQLをユニオンクエリ(名前をクエリAB)として保存し、集計した結果が以下のSQLです。 SELECT クエリAB.Field1, クエリAB.Field2, Sum(クエリAB.KensuA) AS KensuAの合計 FROM クエリAB GROUP BY クエリAB.Field1, クエリAB.Field2; 何らかの参考になれば良いのですが・・・

LELELEo
質問者

お礼

keirikaさん、お返事が送れてしまい申し訳ございません。 SQLまで書いて頂いてありがとうございます、とても勉強になります。 自分の飲み込みが悪くて大変遅いですが、皆さんのアドバイスのおかげで前に進んでいます。 ご回答有難うございました。

その他の回答 (1)

noname#140971
noname#140971
回答No.1

tab1: ID_Field1_Field2 _1_AAA________10 _2_BBB_______100 _3_CCC_______200 _4_CCC_______200 _5_DDD_______100 tab1: ID_Field1_Field2 _1_AAA________10 _2_BBB_______100 _3_CCC_______200 _4_EEE_______100 クエリ1: ID_Field1_Field2_Field3 _1_AAA________10______0 _2_BBB_______100______0 _3_CCC_______200______0 _4_CCC_______200______0 <--- 1 にならない! _5_DDD_______100______1 クエリ2: ID_Field1_Field2_Field3 _1_AAA________10______0 _2_BBB_______100______0 _3_CCC_______200______0 _4_EEE_______100______2 問題は、 _4_CCC_______200______0 <--- 1 にならない! ですね。 さて、上記の例では ID_Field1_Field2_Field3_Fileld4 _1_AAA________10______1______0 _2_BBB_______100______1______0 _3_CCC_______200______1______0 _4_CCC_______200______2______1 <--- 1 に! _5_DDD_______100______1______1 <同じデータの何番目か?>を意味するField3を生成すれば解決できます。 ※で、これが可能なテーブル設計でしょうか?

LELELEo
質問者

お礼

Husky2007さん、 お返事が遅れてしまい申し訳ございません。 頂いたアドバイス通り、新しいフィールドの追加作業にかかっています。 まだちゃんと動いていない状態ですが、なんとか前に進めそうです! 本当に有難うございました。

関連するQ&A