- ベストアンサー
重複しないデータの抽出について
MYSQL5.0.77で DBをつくり テーブル1のAフィールドのデータから テーブル2のAフィールドのデータ、 テーブル3のAフィールドのデータ、 テーブル3のAフィールドのデータ、 のいずれにも重複しないデータのみ 抽出したいと思っています。 どのようなSQL文を書けばよいでしょうか? じぶんでいろいろ試しましたがどうしても出来ません。 どなたかご教授願います。
- みんなの回答 (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 でどうでしょう?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
テーブル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
補足
回答ありがとうございます。 PHPMYADMINから SQLを入力しましたが、 処理が重くて タイムアウトしてしまいます。 データの件数はDB全体で80万件位です。 サーバのスペックはHPのPROLIANTサーバで1ヶ月前に買ったばかりの物です。 デュアルコアXeon2.4GHZ に1.5GBのメモリをつんでいます。 centos5 にPHPMYADMINとMYSQL以外には使用していませんので 他に何かよい方法がありましたら ご教授願います。 ちなみにUNIONで結合せずに テーブル1からテーブル2の重複しないデータのみを抽出した場合も 同じくタイムアウトしてしまいます。
お礼
ありがとうございました。 以前のSQLとは違って 即効で結果が返ってきました。 件数からいって間違いないと思います。 本当にどうもありがとうございました。