質問: ms accessで2つのテーブルを比較したい 数々この質問は出ているのですが、『不一致クエリウィザード』でやっても上手くいかないので、こちらで質問させていただくことにしました。 比較したいデータは、フィールドの名前が異なる2つのテーブルがあって、その比較したいフィールド数は120になります。 同一フィールドは「fid」「laa」というフィールドです。 一応自分で『不一致クエリウィザード』でやってみた手順としては以下の通りになります。 1.『不一致クエリウィザード』をクリック 2.どちらかのテーブルを選択(レコード抽出テーブルや比較するテーブルなど) 3.関連付けフィールドは、2つのテーブルで同じものを選択 (「fid」「laa」を選択) 4.結果を表示するフィールドを選択(120個全部) 5.「クエリのデザインを編集する」の方にチェックを入れて「完了」 6.クエリのデザインになったら、それぞれの名前は違うけど対応するフィールド同士をつなぐ 7.結合プロパティで2番ないし3番を選択 8.それを全部のフィールドにした ↓ すると「クエリが複雑すぎます」とエラーメッセージが出てしまった。 一体どうすればよいのでしょうか? なにぶん初心者ですので、よろしくお願いします。 ※もしかして、フィールド名が異なっているのはダメなのでしょうか?
回答: >8.それを全部のフィールドにした 原因はこれ。 フィールドの結合が出来るのは、だいたい、10個以下。それ以上になると「複雑すぎ」と言われてエラーになります。 こういう場合は「データの中に絶対に現われない文字」を使って複数のフィールドを連結して、比較するフィールドを減らす。 クエリで select *,f1&"_@_"&f2&"_@_"&f3&"_@_"&f4&"_@_"&f5&"_@_"&f6&"_@_"&f7&"_@_"&f8&"_@_"&f9&"_@_"&f10&"_@_"&f11&"_@_"&f12&"_@_"&f13&"_@_"&f14&"_@_"&f15&"_@_"&f16&"_@_"&f17&"_@_"&f18&"_@_"&f19&"_@_"&f20 as c1,f21&"_@_"&f22&"_@_"&f23&"_@_"&f24&"_@_"&f25&"_@_"&f26&"_@_"&f27&"_@_"&f28&"_@_"&f29&"_@_"&f30&"_@_"&f31&"_@_"&f32&"_@_"&f33&"_@_"&f34&"_@_"&f35&"_@_"&f36&"_@_"&f37&"_@_"&f38&"_@_"&f39&"_@_"&f40 as c2 from t1 と言うのと select *,f1&"_@_"&f2&"_@_"&f3&"_@_"&f4&"_@_"&f5&"_@_"&f6&"_@_"&f7&"_@_"&f8&"_@_"&f9&"_@_"&f10&"_@_"&f11&"_@_"&f12&"_@_"&f13&"_@_"&f14&"_@_"&f15&"_@_"&f16&"_@_"&f17&"_@_"&f18&"_@_"&f19&"_@_"&f20 as c1,f21&"_@_"&f22&"_@_"&f23&"_@_"&f24&"_@_"&f25&"_@_"&f26&"_@_"&f27&"_@_"&f28&"_@_"&f29&"_@_"&f30&"_@_"&f31&"_@_"&f32&"_@_"&f33&"_@_"&f34&"_@_"&f35&"_@_"&f36&"_@_"&f37&"_@_"&f38&"_@_"&f39&"_@_"&f40 as c2 from t2 と言う2つ作って、両方のc1同士、両方のc2同士を比較すれば、f1~f40の40個のフィールドを比較したのと同じ事になる。 上記の例では、データの中に「_@_」と言う文字列が絶対に無い事を想定している。 この例ではフィールド40個だけど、120個にするのは「増やすだけ」なので簡単。 但し、文字列連結後の文字列が長くなり過ぎると、誤動作する可能性がある。