• ベストアンサー

Accessでフィールドを比較したいのですが

初心者です。 仕様が同じ2つのテーブルの同名フィールドを比較して、 データが同じ時、チェックボックスをTrueとしたいのですが、 比較したいフィールドが2つあり、 Aテーブルのコード1とBテーブルのコード1 Aテーブルのコード2とBテーブルのコード2 テーブルにはそれぞれ、コード1とコード2のチェックボックスを 設けています。 Select caseかIfを使うことはわかるのですが、関数が思いつきません。 よろしくお願いいたします。

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

  • ベストアンサー
  • keikan
  • ベストアンサー率42% (75/176)
回答No.2

更新クエリを使うといいかな AテーブルとBテーブルをそれぞれコード1とコード2でリンクします。(たぶんもう1個キーになるフィールドもあると思うのですがそれもリンクする事になると思います) この時点で、AテーブルとBテーブルのコード1とコード2が同じ物だけがレコードとして抽出されます。 レコードの更新のチェックボックスをTrueにします。 で、このクエリーを実行すると抽出されたレコードに対してTrue が設定されます。

Nikki1211
質問者

補足

keikanさま、お世話になります。 ご教授いただきましたとおり、 選択クエリでAテーブルとBテーブルをリンクし、 (両方のテーブルの結合フィールドが同じもの) 更新クエリにしましたところ、 Bテーブルが空の時はチェックボックスが更新されるのですが、 両方にデータがある時、機能しないのです・・・ SQLは UPDATE テーブルB INNER JOIN テーブルA ON (テーブルB.コード1 = テーブルA.コード1) AND (テーブルB.コード2 = テーブルA.コード2) SET テーブルA.コード1FG = Yes, テーブルA.コード2FG = Yes; となっていますが、 どこかおかしいところがありますでしょうか? お手数をおかけいたしますが、どうぞよろしくお願いいたします。

その他の回答 (4)

  • keikan
  • ベストアンサー率42% (75/176)
回答No.5

>Bテーブルが空の時はチェックボックスが更新されるのですが、 両方にデータがある時、機能しないのです・・・ この結合に於いてBテーブルが空だとすると選択されたレコードは1件もない状態だと思います。 #3さんの回答で解決されていれば良いですが、 機能しないとはどう機能しないのか? 何も変更されない? 変な変更をする? 意図しない変更をする? などわかる範囲でお願いします。 この結合は、あくまでもテーブルAのコード1がテーブルBのコード1と等しく且つテーブルAのコード2がテーブルBのコード2が等しいときに更新される物です またコード1が等しいときにはFLG1 コード2が等しいときはFLG2にチェックが入るようにするにはコード1だけの更新クエリーとコード2だけの更新クエリーをつくってそれぞれ実行してください。

Nikki1211
質問者

お礼

keikanさま、度々のご教授、ありがとうございます。 何度か更新クエリを作り直してみたところ、keikanさまが最初に書き込んでくださった方法で、更新されるようになり、Yesの抽出とNoの抽出が可能になりました。 palmmyさま、O_cyanさま、色々な方法を考えていただき、ありがとうございました。 おかげさまで、既存システムへの接続がスムーズに行えるようになりました。 こんなに親切に教えていただき、本当に心から感謝申し上げます。 今日からゆっくり眠れそうです。 またお世話になることがあるとは思いますが、今後ともよろしくお願いいたします。

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.4

#1です。 私も#3さんの更新クエリーを2回流すのが良いかと思います。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>caseかIfを使う・・ VBでも出来ますが#2の方が書いているように更新クエリを使った方が簡単です。 ただ#2の方の書いてあるようにするとテーブルA・Bのコード1が同一でかつテーブルA・Bのコード2が同一のレコードが抽出されてしまいます。(それで良ければ#2の方の回答で大丈夫です。ただコード1同士・コード2同士のリレーションで大丈夫です) 質問から察すればコード1が同一のレコードはコード1チェックにTrue。コード2が同一のレコードはコード2チェックにTrue。という事だと思うので その場合コード1同士が同一ならコード1チェックをTrueにするクエリとコード2同士が同一ならコード2チェックをTrueにするクエリの2つが必要です。 テーブルAのコード1チェックだけのクエリを作りテーブル追加でテーブルBを追加します。更新のフィールドにテーブルBのコード1チェックを追加します。テーブルA・Bのコード1同士にリレーションをします。テーブルA・Bのコード1チェック両方のレコードの更新にTrueを指定します。 これでテーブルA・Bの両テーブルのコード1チェックにTrueが書き込まれる更新クエリが出来ます。 コード2チェックの更新クエリも同様にして更新フィールドを両テーブルのコード2チェックにしレコードの更新は同様にTrueです。 この2つの更新クエリを使えばOKです。 SQLを使ってクエリを記述するなら下記のように UPDATE テーブルA INNER JOIN テーブルB ON テーブルA.コード1 = テーブルB.コード1 SET テーブルA.コード1チェック = True, テーブルB.コード1チェック = True; コード2チェックの更新はSET以降のコード1チェックをコード2チェックに変更すればOKです。

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.1

レコードはどのように比較するのでしょうか? キーフィールドの一致するもの同士を比較する? 仕様が同じ2つのテーブル [1組のTEST結果][2組のTEST結果] があって、 [1組のTEST結果]国語と[2組のTEST結果]国語 [1組のTEST結果]算数と[2組のTEST結果]算数 を比較するのだと思いますが、 出席番号が同じレコード同士を比較するとか。 [1組のTEST結果]の各レコードを[2組のTEST結果] の全件と比較するとか。

Nikki1211
質問者

補足

palmmyさま、ご回答ありがとうございます。 やりたいことは、AテーブルとBテーブルにある、 それぞれのコード1とコード2フィールドの全件の比較です。 他にもフィールドはたくさんあるのですが、比較するのは コード1とコード2のみになります。 AテーブルがExcelをインポートしたデータで、 Bテーブルが前回インポートしたデータなのですが、 コード1とコード2を比較して、同じデータと違うデータ に分岐して、別々のテーブルに追加する、という ことをしたいのです。 このテーブルにはキーがなく、分岐したテーブルを既存の Accessのシステムにつなげる仕様にしなければなりません。 現在は、 Aテーブルへインポート→データ比較→分岐 →同じデータをCテーブルへ追加→Bテーブル削除 →違うデータをBテーブルへ追加→既存システムへ という順序でやっていますが、なかなかうまくできず、 もう1ヶ月も悩んでいます・・・ よろしくご教授くださいますよう、お願いいたします。

関連するQ&A