• ベストアンサー

accessで2つのテーブルの比較

他にも質問が出てるかもしれませんが、急いでいるので質問させていただきます。 今2つのテーブルがあってその2つのテーブルのデータを比較したいのです。 同じIDを持っているので、それで結合しているのですが2つのテーブルのデータが異なるレコードのみ抽出したいのです。 どなたかすみませんが教えて下さい。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

テーブルを「TableA」「TableB」とし、結合フィールドが「ID」で 以降のフィールドを「Field1」「Field1」・・・「Field8」「Field9」 と仮定します。 また、テーブル「TableA」「TableB」には、それぞれ同じ「ID」が存在し、 片方だけに存在するものがないものと仮定します。 異なった時、TableA のものを表示するものとします。 (クエリのSQLビューに記述していきます) SELECT TA.* FROM TableA AS TA INNER JOIN TableB AS TB ON TA.ID=TB.ID WHERE TA.Field1 <> TB.Field1 OR TA.Field2 <> TB.Field2 OR ・・・ OR TA.Field8 <> TB.Field8 OR TA.Field9 <> TB.Field9; ※ NULL のフィールドがあるのなら、 Nz を使うとか工夫が必要だと思います。 ※ WHERE 部分を1つの文字列にしてから判別することでもできると思います。 TA.Field1 & TA.Field2 & ・・・ & TA.Field9 <> TB.Field1 & TB.Field2 & ・・・ & TB.Field9 ただこの方法では、各Field値が異なっていても同じ文字列になる可能性があるかも??。 ※ TableB のものを表示したいのなら、 SELECT TA.* FROM ・・・ を SELECT TB.* FROM ・・・ ※ TableA, TableB 両方表示したいのなら、 SELECT TA.* FROM ・・・ を SELECT TA.*, TB.* FROM ・・・ で1行表示 SELECT TA.* FROM ・・・ を SELECT 'A' AS TBL, TA.* FROM ・・・ UNION SELECT 'B' AS TBL, TB.* FROM ・・・ で異なった行で表示 'A' AS TBL / 'B' AS TBL 部分は、どちらのテーブルのデータかを示すだけのもの。 並び替えしたいのなら、さらに SELECT * FROM ( SELECT 'A' AS TBL, TA.* FROM ・・・ UNION SELECT 'B' AS TBL, TB.* FROM ・・・ ) ORDER BY 並べたいフィールドの指定; で、いけると思います。 ( ; は最後に1つだけあればよいです) ※ 片方にしかIDが存在しない時とかは、 INNER JOIN を、LEFT JOIN / RIGHT JOIN に変更し、 IsNull(TA.ID) とか、IsNull(TB.ID) をWHERE条件に追加すればいけると思います。 TableA にあって TableB に無い場合がある時、 SELECT TA.* FROM TableA AS TA LEFT JOIN TableB AS TB ON TA.ID=TB.ID WHERE IIF(IsNull(TB.ID),TRUE, TA.Field1 <> TB.Field1 OR TA.Field2 <> TB.Field2 OR ・・・ OR TA.Field8 <> TB.Field8 OR TA.Field9 <> TB.Field9); 従来の条件を IsNull でなかった場合に指定します。 など

rie78
質問者

お礼

色々と細かく教えていただきありがとうございます。 なんとかなりそうです!

その他の回答 (1)

  • shaku_
  • ベストアンサー率0% (0/1)
回答No.1

2 つのテーブルを比較し、一致するものがないレコードを検索する http://office.microsoft.com/ja-jp/access/HA102051321041.aspx が参考になるかも

参考URL:
http://office.microsoft.com/ja-jp/access/HA102051321041.aspx
rie78
質問者

お礼

アドバイスありがとうございます。 参考にしてみます。

関連するQ&A