アクセステーブル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でするといった方法を検討した方がいいのでしょうか?
色々調べてみたのですが、どっちもやり方が分からないので、
それはそもそも出来ないよなどの
アドバイスもございましたら、どうぞ宜しくお願いいたします。
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;
何らかの参考になれば良いのですが・・・
keirikaさん、お返事が送れてしまい申し訳ございません。
SQLまで書いて頂いてありがとうございます、とても勉強になります。
自分の飲み込みが悪くて大変遅いですが、皆さんのアドバイスのおかげで前に進んでいます。
ご回答有難うございました。
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を生成すれば解決できます。
※で、これが可能なテーブル設計でしょうか?
Husky2007さん、
お返事が遅れてしまい申し訳ございません。
頂いたアドバイス通り、新しいフィールドの追加作業にかかっています。
まだちゃんと動いていない状態ですが、なんとか前に進めそうです!
本当に有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataTableから条件を満たした行...
-
ORACLEデータをACCESSへインポ...
-
「マスタ」と「テーブル」の違...
-
エクセルでテーブルの最終行が...
-
ACCESS 一番最新の日付の金額...
-
3つ以上のテーブルをUNIONする...
-
ACCESSのSQLで、NULLかNULLでな...
-
数百万件レコードのdelete
-
accessのロック
-
データの二重表示の原因
-
主キーにインデックスは貼らな...
-
重複するキーから一番古い年月...
-
accessのエクスポートエラーに...
-
SELECT時の行ロックの必要性に...
-
あるテーブルのデータを追加、...
-
Accessでクエリを完了できませ...
-
2つのテーブルから条件に一致...
-
オラクルではできるのにSQLSERV...
-
Access VBA [リモートサーバー...
-
sqlserverで集計結果をUPDATEし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DataTableから条件を満たした行...
-
ACCESSテーブル2つのデータの...
-
Delphiのデータベースについて
-
DataAdapterについて教えてくだ...
-
Accessのフォーム上でSQLServer...
-
SPREAD でのデータ連動、更新に...
-
VBA 印刷範囲の設定方法
-
ORACLEデータをACCESSへインポ...
-
「マスタ」と「テーブル」の違...
-
[ BETWEEN ] vs [ >= AND <= ]
-
2つのテーブルから条件に一致...
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
SELECT時の行ロックの必要性に...
-
3つ以上のテーブルをUNIONする...
-
SELECT文でのデッドロックに対...
-
2つの項目が重複するレコード...
-
Access VBA [リモートサーバー...
-
数百万件レコードのdelete
-
ACCESS2007 フォーム 「バリア...
おすすめ情報