• 締切済み

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

同じテーブルが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は、できるものと前提して記述しています。

関連するQ&A

  • 2つのテーブルからレコードを抽出する方法

    お世話になります。MySQLに関する質問です。 TABLE1とTABLE2の2つのテーブルからレコードを抽出する際、 TABLE1からは全項目のデータを取得し、TABLE2からは一部の項目の データを取得したいと考えています。 条件は、TABLE1とTABLE2を[No]という項目の値で紐(ひも)づけます。 (1) SELECT * FROM TABLE1 (2) SELECT COL_A, COL_B, COL_C FROM TABLE2 上記(1)(2)のレコードを1つのSQLで取得する方法について、どなたかご教授願えますか?

    • ベストアンサー
    • MySQL
  • 2つのテーブルを比較して、不一致レコードを抽出するSQL文

    2つのテーブルを比較して、不一致レコードを抽出するSQL文を教えてください。まったくの初心者なので、よろしくお願いします。

  • 2つのテーブルのデータまとめて取得したい

    SQL Server2008を使用しているのですが、どうのようにデータを取得すれば良いか わからず困っております。 例えば、 名前は違うが全く同じテーブルが2つあるとします。 テーブルAには6レコード、テーブルBには3レコードのデータが存在するとします。 この時、単純に6レコード+3レコードの 9レコード分をひとつのテーブルとしてデータを 取得するにはどのようなSQL文を書けばよいでしょうか? SELECT * FROM テーブルA, テーブルBでは18レコードもデータを取得してしまい、且つ フィールド数も増加してしまいます。 宜しくお願いいたします。

  • アクセスのテーブルの差分の抽出について

    アクセスの初心者です。今、仕事でデーターの差分の抽出の仕方についてわからず困っています。 2つのテーブルがあります。 テーブルには100以上の項目と500件ほどのレコードがそれぞれ入っています。 この2つのテーブルを比較して差分を出したいのですが方法が思いつきません。 出したいものは、テーブル1とテーブル2の共通のIDを比較し、 テーブル1からテーブル2で変更、追加されたものを出したいのです。 レコードの追加だけなら差分クエリを利用してやれると思うのですが、 100以上の全フィールドをそれぞれ比較するとなるとどうすれば良いのかわからないのです。 2つのテーブルの項目は基本一緒ですが、追加されたり、変更されたりします。 もともとはエクセルのデータで毎週やりとりされるもので、 エクセル上で手作業で、 シート1とシート2でマッチングを行い、シート3に追加、変更されたものを書き出しています。 100列ほどの項目も追加や変更されるので、前回データと今回データで (1)列の比較をして2つの列数を揃えてから、 (2)KEYになる列でVLOOKUP関数を使い、追加されたデータをよけて、 (3)前回データと今回データが一緒のデーター並べ替え、揃えて、シートを比較して変更、追加を探す という作業を行っています。 データー数が多く、エクセルでは限界がでてきました。 また、アクセスを使えば簡単にできる。と言われましたが、 まだまだ初心者のため、この大量のデータをどう処理すればいいのかわかりません。 質問は、 (1)アクセスで100項目以上あるテーブルのそれぞれの差分をだすことができるのでしょうか? (2)その方法はどうすればよいのでしょうか? また、アクセス初心者でも勉強すればすぐにできるのでしょうか? と、いうことです。 会社に迷惑をかけないためにも、可能、不可能を判断したいです。 よろしくお願いいたします。

  • 1つのテーブルからのデータ取得

    お世話になります。 Table1にはA,Bのフィールドがあり 例えば A=01のレコードを取得(取得するフィールドはA,B) このレコードを(1)とする。 Table1のうち、Aが(1)のBと一致する レコードを(2)とする。 Table1のうち、Aが(2)のBと一致する レコードを(3)とする。 N番目のBと一致するTable1のAがなくなるまで 上記を繰り返す。 (1),(2),(3)・・・の A,Bの値を取得するためには どういうSQL文を書けばいいでしょうか? 例:ここでA=01を設定する テーブル例と結果 Table1 A: B 01:02 取得 02:04 取得 02:05 取得 03:04 X 04:06 取得 05:10 取得 07:11 X 10:15 取得 以上お教えください。よろしくお願いします。

  • レコード内容からテーブル特定

    Oracleのデータ更新について質問させてください。 SQL文で、ある文字列を含むレコードデータを持つ、テーブルおよびレコード名を知る方法はありますでしょうか? 具体的には、DBに登録されている"google.co.jp"という文字列を"yahoo.co.jp"という文字列に全てupdateしたいのですが、 "google.co.jp"という文字列は複数のテーブルの不特定のレコードに格納されています。 全てのテーブルを1つ1つselectで見ていくしか方法は無いのでしょうか?

  • テーブルの差分を抽出する方法

    TSVファイルが送られてくるたびに 1.CREATE TABLE 2.データ格納 しているのですが、前回と今回で送られたレコードの差分を抽出する、良い方法ありますでしょうか? 同じ構成のテーブルを2つ用意するとなんとなく比較しやすそうですが、そこから先が思いつきません。 ■作成するテーブル(PKは複合キーで項目AとBです)  A B C D  1 2 xx yy  2 3 aa bb

  • 順番に並んだ各レコードの、前後のレコードと結合

    質問です。mysqlのTBLテーブルの同じカラムに 1 3 7 10 11 という数字データのレコードが入っています。 この時 3 1 7 3 10 7 11 10 と、それぞれのレコード(左)よりひとつ小さな数のレコード(右)を 並べて取得するSQL文はどう書けばいいのでしょうか? よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • テーブル内のレコードを別のテーブルに移す良い方法を教えてください

    SQLサーバー7.0(ADO)とAccess97のVBAでアプリケーションの開発を行っております。SQLサーバー7.0(サーバー側)にあるテーブルの中身(レコード全件)をAccess97(ローカル)にあるテーブル(テーブル名とその中のフィールド名は全く同じだが中身はからっぽ)にまとめて移しかえる良い方法があれば教えてください。いま私はフォームオープンイベントでフィールドとレコードをループでまわして移しかえているのですが、テーブル数も多いため記述も長くなりますし、何よりもパフォーマンスが良くありません。テーブル単位で中身を別のテーブルに移す方法などがあれば是非教えてください。 (例) SQLサーバー(ホスト側)---テーブル名「T_社員マスター」フィールド数100項目、レコード数500件 ↓ ↓ フォームオープン時にそのまま移しかえたい ↓ ↓ Access97(端末側)-------テーブル名「T_社員マスター」フィールド数100項目、レコード数0件 よろしくお願いします。

  • テーブルで一番古いレコードだけをSELECTしたい

    テーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ■背景 ・テーブルからデータを取得しようと思ったら、「id」及び「autoincrement」に該当するカラムがありませんでした ・日付に該当するカラムもありません ・「phpMyAdmin」で確認すると、いつも同じ並び順で表示されるので、格納したレコード順で表示されているのではないかと思いました ■質問 ・この時、そのテーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ・where?

    • ベストアンサー
    • MySQL