• ベストアンサー

2つのテーブルのレコードを比較し、片方にないものを削除したい。

初診者です。簡単なことかもしれませんがご回答お願い致します。 Access2000を使用しています。 前年度のデータと今年度のデータを比較して、 今年度にないものを抽出したいと考えています。 レコードのフィールドは、端末名(一意)、設置場所です。 結合プロパティを使用して、結合条件を端末名にし、さらに 端末名(前年度)抽出条件を "is Null" にすることで抽出 を試みましたが、 設置場所が前年度から今年度に変更した時には抽出可能(*1) なのですが、端末自体のレコードが今年度に追加されたときは 抽出されません(*2)。 今年度に追加されたときについても抽出できる方法を教えて下さい。 *1の場合(○抽出可)  ○昨年度テーブル       ○今年度テーブル 端末名 | 設置場所     端末名 | 設置場所 AAA     風呂       AAA    台所 *2の場合(×抽出不可)← 抽出したい  ○昨年度テーブル       ○今年度テーブル 端末名 | 設置場所     端末名 | 設置場所    レコード無し       BBB    便所        

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

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

#1です > 削除したデータを表示されるようにするには 今年度テーブルにあるけど、昨年度テーブルに無いものを抽出する。で良いでしょうか。 新規mdbに以下の小さなテーブル/データを作成し確認していきます。 テーブル名:今年度 フィールド名:端末名、設置場所 端末名...設置場所 AAA......台所 BBB......便所 テーブル名:昨年度 フィールド名:端末名、設置場所 端末名...設置場所 AAA......風呂 CCC......居間 クエリデザインで、「今年度」「昨年度」テーブルを表示させます。 「端末名」どうしを結合し、プロパティで今年度の全レコードと・・・を選択します。 今年度テーブルの「端末名」「設置場所」、昨年度テーブルの「端末名」「設置場所」を順次ダブルクリックしていきます。 ここで、クエリの表示を「データシートビュー」に切り替えると以下の様な表示になります。 今年度.端末名......今年度.設置場所......昨年度.端末名......昨年度.設置場所 AAA...................台所.................AAA................風呂 BBB...................便所................(空白)..........(空白) クエリの表示を「デザインビュー」に切り替えます。 テーブル昨年度の端末名の抽出条件に Is Null を記述し、再度データシートビューにすると以下の様になります。 今年度.端末名......今年度.設置場所......昨年度.端末名......昨年度.設置場所 BBB...................便所................(空白)..........(空白) クエリの表示をデザインビューに切り替え、テーブル昨年度の端末名/設置場所の表示のチェックを外し、またデータシートビュー表示にすると 端末名...設置場所 BBB......便所 ※昨年度にあるけど今年度に無い、は、結合プロパティを、昨年度の全レコードと・・・ ※に変更し、 Is Null を今年度の端末名の条件に記述します。 別の手順の紹介) 上記の「今年度」「昨年度」テーブルを使用します。 データベースウィンドウで、クエリを選んでおきます。 ・上(データベースウィンドウ)にある「新規作成」をクリックします。 ・「不一致クエリウィザード」を選択し「OK」ボタン ・「今年度」テーブルを選択し「次へ」 ・「昨年度」テーブルを選択し「次へ」 ・今年度、昨年度のフィールド「端末名」が反転表示されていることを確認し、真中の「<=>」をクリックし「次へ」 ・「>>」ボタンをクリックし、「端末名」「設置場所」を表示するようにして「次へ」 ・クエリ名を指定して、「クエリのデザインを編集する」を選んで「完了」ボタン ここで表示されるクエリの内容は、前に作成したものと同じになります。 また、わからなかったら補足にでも書いてください。

boojar
質問者

お礼

非常に分かりやすい説明ありがとうございました。 問題は解決されて、ネクストステージへ行けそうな気がします。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • don9don9
  • ベストアンサー率47% (299/624)
回答No.3

Accessのクエリーで結合条件のプロパティを開くと 「両方のテーブルの結合フィールドが同じ行だけを含める」 「(テーブルA)の全レコードと(テーブルB)の同じ結合フィールドのレコードだけを含める」 「(テーブルB)の全レコードと(テーブルA)の同じ結合フィールドのレコードだけを含める」 の3種類があると思いますが テーブルAにしか存在しないレコードを抽出したい場合は 2番目の結合を選び、テーブルBの結合フィールドの抽出条件をIs Nullとします。 逆にテーブルBにしか存在しないレコードを抽出したい場合は 3番目の結合を選び、テーブルAの結合フィールドの抽出条件をIs Nullとします。 結合の種類を2番目から3番目に変えるとき Is Nullの条件を指定するフィールドも変えなければいけません。 質問者様の例でいうと、 今年度にしか存在しない端末を抽出したい場合は昨年度の端末名をIs Null 昨年度にしか存在しない端末を抽出したい場合は今年度の端末名をIs Null としなければいけません。 失礼ながら、この点を間違えておられるのではないかと思います。 違っていたらすみません。

boojar
質問者

お礼

解決しました。 逆の場合についても抽出する必要があったので、参考になる 医研どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> 結合プロパティを使用して、結合条件を端末名にし、・・・ 結合プロパティ内、3種類の結合を選べると思いますが、 それぞれを選んだ時の表示を確認してみてください。 ※ 小さいテーブルで、少ないフィールド数で、全てのフィールドを表示するようにしてみてください。 どっちを全レコード指定するかによって、表示が変わります。 その表示状態を確認の上で、抽出条件に Is Null を記述してみてください。

boojar
質問者

お礼

問題は解決されて、ネクストステージへ行けそうな気がします。 どうもありがとうございました。

boojar
質問者

補足

ご回答ありがとうございます。 表示状態を確認してみました。 3種類の結合のうち、上から2番目のものをチェックした場合に 、上記の質問文のような状態になります。 他の結合の場合には、データの表示すらできません。 削除したデータを表示されるようにするには、どのようにするの が良いかもしお知りでしたら他の方法でもよいので、お手数です が教えていただけると助かります。

すると、全ての回答が全文表示されます。

関連するQ&A