• ベストアンサー

重複しないデータの抽出について

MYSQL5.0.77で DBをつくり テーブル1のAフィールドのデータから テーブル2のAフィールドのデータ、 テーブル3のAフィールドのデータ、 テーブル3のAフィールドのデータ、 のいずれにも重複しないデータのみ 抽出したいと思っています。 どのようなSQL文を書けばよいでしょうか? じぶんでいろいろ試しましたがどうしても出来ません。 どなたかご教授願います。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ちょっとチューニングをしてみましょう テーブル1,2,3の各Aフィールドにindex(もしくはプライマリ)を 設定してください。 そのうえで・・・ SELECT * FROM テーブル1 AS T1 LEFT JOIN `テーブル2` AS T2 ON T1.A=T2.A LEFT JOIN `テーブル3` AS T3 ON T1.A=T3.A WHERE T2.A IS NULL AND T3.A IS NULL でどうでしょう?

cobra_psy
質問者

お礼

ありがとうございました。 以前のSQLとは違って 即効で結果が返ってきました。 件数からいって間違いないと思います。 本当にどうもありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

テーブル1に対してテーブル2とテーブル3をユニオンしたものを AフィールドをキーにLEFT JOINし、NULLをひろう こんなかんじ SELECT * FROM テーブル1 AS T1 LEFT JOIN (SELECT A FROM `テーブル2` UNION SELECT A FROM `テーブル3` ) AS SUB ON T1.A=SUB.A WHERE SUB.A IS NULL

cobra_psy
質問者

補足

回答ありがとうございます。 PHPMYADMINから SQLを入力しましたが、 処理が重くて タイムアウトしてしまいます。 データの件数はDB全体で80万件位です。 サーバのスペックはHPのPROLIANTサーバで1ヶ月前に買ったばかりの物です。 デュアルコアXeon2.4GHZ に1.5GBのメモリをつんでいます。 centos5 にPHPMYADMINとMYSQL以外には使用していませんので 他に何かよい方法がありましたら ご教授願います。 ちなみにUNIONで結合せずに テーブル1からテーブル2の重複しないデータのみを抽出した場合も 同じくタイムアウトしてしまいます。

関連するQ&A