• 締切済み

同テーブルの差分レコードの抽出

同じテーブルが2つあります。 それぞれには、データが入っており、 その二つのテーブルから、SQLで 不一致レコードを取得したい と思っています。 すみませんがいい方法がありましたら, 教えてください。

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.5

こんにちわ。 #2 のmuyoshid です。 確かにMysql では、MINUS 演算子はサポートされていないようですね。 そうなると、こういった処理を行う必要がどの程度あるかですね。 あまり頻繁にあるようであれば、こういった機能をサポートしている データベースに乗り換えるのが良いと思います。 それ程でもない場合ですが、 1) 自作ツールを作成する。 2) A, B 表のデータを差分レコードの検索を行えるデータベースに一度移行   して、検索結果をMysql に取り込む。 1) についてですが方法として、   1. A表, B表と同じ形式のC表を用意。   2. A表から1レコード取り出す。   3. 取り出したデータがB表にあるか確認。   4. B表に一致するデータが無ければC表にデータをInsert。   5. A表のデータを全て処理するまで、2. 以降を繰り返す。 と言うプログラムを書く事になると思います。 データ件数にもよりますが、大量の検索が行われるのでプログラム実行中に 他のプログラムの性能劣化が心配ですが・・・。 一時的に他のデータベースを使用する程度であれば、ユーザ登録 (無料) が 必要ですが、US OTN にOracle の開発ライセンスが置いてありますので、 こちらをDownload されてはいかがでしょうか? ※ サポートを受ける事はできませんが、取りあえず無料で使用できます。

参考URL:
http://technet.oracle.com/
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.4

MySQLでは NOTは 使えるようですね。 条件に対して NOTというのは できるのかな? つまり 一致する条件 以外ということで・・・。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 データベースがわからないので、一般的なものを。 SELECT * FROM テーブルA WHERE NOT EXISTS (SELECT * FROM テーブルB WHERE テーブルA.判断するフィールド = テーブルB.判断するフィールド) または、 SELECT * FROM テーブルA WHERE 判断するフィールド NOT IN (SELECT 判断するフィールド FROM テーブルB WHERE テーブルA.判断するフィールド = テーブルB.判断するフィールド)

takomaru
質問者

補足

すみません。ACCESSはなれていないので、 MySQLにデータをインポートして、MySQLで 処理させようとしています・・・。 で、調べたところによりますと、 NOT EXISTSと NOT IN は使えない模様です。。。

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 お使いのデータベースが何か記載されていないので、確実な事は言えませんが、 Oracle であればMINUS 演算子が使えると思います。 Select * from a minus select * from b; とすると、A 表から戻されるが、B 表からは戻されない行が返されます。

takomaru
質問者

補足

すみません。ACCESSです。 なので、MINUSは使えませんでした・・・

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

キーとなる項目で抽出条件を以下のようにしてあげればいいかと思います。 WHERE句で Aのテーブル.キー項目<>Bのテーブル.キー項目 複数テーブルのSELECTは、できるものと前提して記述しています。