プロが教える店舗&オフィスのセキュリティ対策術

初心者です。

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

A 回答 (5件)

更新クエリを使うといいかな



AテーブルとBテーブルをそれぞれコード1とコード2でリンクします。(たぶんもう1個キーになるフィールドもあると思うのですがそれもリンクする事になると思います)

この時点で、AテーブルとBテーブルのコード1とコード2が同じ物だけがレコードとして抽出されます。

レコードの更新のチェックボックスをTrueにします。
で、このクエリーを実行すると抽出されたレコードに対してTrue が設定されます。

この回答への補足

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;
となっていますが、
どこかおかしいところがありますでしょうか?

お手数をおかけいたしますが、どうぞよろしくお願いいたします。

補足日時:2005/02/04 14:01
    • good
    • 0

>Bテーブルが空の時はチェックボックスが更新されるのですが、


両方にデータがある時、機能しないのです・・・

この結合に於いてBテーブルが空だとすると選択されたレコードは1件もない状態だと思います。

#3さんの回答で解決されていれば良いですが、
機能しないとはどう機能しないのか?
何も変更されない?
変な変更をする?
意図しない変更をする?
などわかる範囲でお願いします。

この結合は、あくまでもテーブルAのコード1がテーブルBのコード1と等しく且つテーブルAのコード2がテーブルBのコード2が等しいときに更新される物です

またコード1が等しいときにはFLG1
コード2が等しいときはFLG2にチェックが入るようにするにはコード1だけの更新クエリーとコード2だけの更新クエリーをつくってそれぞれ実行してください。
    • good
    • 0
この回答へのお礼

keikanさま、度々のご教授、ありがとうございます。

何度か更新クエリを作り直してみたところ、keikanさまが最初に書き込んでくださった方法で、更新されるようになり、Yesの抽出とNoの抽出が可能になりました。
palmmyさま、O_cyanさま、色々な方法を考えていただき、ありがとうございました。
おかげさまで、既存システムへの接続がスムーズに行えるようになりました。

こんなに親切に教えていただき、本当に心から感謝申し上げます。
今日からゆっくり眠れそうです。

またお世話になることがあるとは思いますが、今後ともよろしくお願いいたします。

お礼日時:2005/02/04 21:13

#1です。



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

>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です。
    • good
    • 0

レコードはどのように比較するのでしょうか?


キーフィールドの一致するもの同士を比較する?

仕様が同じ2つのテーブル
[1組のTEST結果][2組のTEST結果]
があって、
[1組のTEST結果]国語と[2組のTEST結果]国語
[1組のTEST結果]算数と[2組のTEST結果]算数
を比較するのだと思いますが、
出席番号が同じレコード同士を比較するとか。
[1組のTEST結果]の各レコードを[2組のTEST結果]
の全件と比較するとか。

この回答への補足

palmmyさま、ご回答ありがとうございます。

やりたいことは、AテーブルとBテーブルにある、
それぞれのコード1とコード2フィールドの全件の比較です。

他にもフィールドはたくさんあるのですが、比較するのは
コード1とコード2のみになります。
AテーブルがExcelをインポートしたデータで、
Bテーブルが前回インポートしたデータなのですが、
コード1とコード2を比較して、同じデータと違うデータ
に分岐して、別々のテーブルに追加する、という
ことをしたいのです。

このテーブルにはキーがなく、分岐したテーブルを既存の
Accessのシステムにつなげる仕様にしなければなりません。

現在は、
Aテーブルへインポート→データ比較→分岐
→同じデータをCテーブルへ追加→Bテーブル削除
→違うデータをBテーブルへ追加→既存システムへ
という順序でやっていますが、なかなかうまくできず、
もう1ヶ月も悩んでいます・・・

よろしくご教授くださいますよう、お願いいたします。

補足日時:2005/02/04 13:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A