[前][次][番号順一覧][スレッド一覧]

mysql:9787

From: <ml_mysql@xxxxxxxxxx>
Date: Wed, 07 Jul 2004 00:58:22 +0000
Subject: [mysql 09787] Re: EXCEPT のMysqlで代替方法。

松枝 さん

ありがとうございました。

At 23:39 04/07/06 +0900, you wrote:
> こんにちは。
>
>ml_mysql@xxxxxxxxxxさんの
><4.2.0.58.J.20040706221822.05d01074@xxxxxxxxxx>
>"[mysql 09784] EXCEPTのMysqlで代替方法。"
>
>
>> 現在は、SELECT mail_address FROM table_b GROUP ON mail_address
>> で 変数 $where に全て読み込んで、"aa@xxxxxxxxxx","bb@xxxxxxxxxx",……のようにし
>> 
>> SELECT * FROM table_a WHERE mail_address NOT IN "$where"
>> 
>> としていますが、
>
> なんか豪腕と言うか、凄いやり方を思いつきましたね。普通はこんなクエリで
>やります。
>
>    SELECT table_a.*
>    FROM table_a LEFT JOIN table_b USING(mail_address)
>    WHERE table_b.mail_address IS NULL;
>
なるほど、LEFT JOIN で結合させれば、table_b にないレコードは
table_b 内の項目は、NULL  になる
従って、NULL  のレコードだけを取り出せば、EXCEPT と 同じになる。
ということですね。

ありがとうございます。

どうも、私は、頭が固いようで、そこまで思いつきませんでした。

>
>
> table_aとtable_bでmail_addressは重複するのでしょうか?また、それぞれの
>テーブルで mail_addressは重複するのでしょうか?どちらかの答が重複するで
>あり、その重複度が高いならば、正規形に持っていく事、テーブルの再設計を考
>えた方が良いでしょう。
>> table_a が約100万件、table_b が現在は数百件ですが、早い時期に数万件に
>> なりそうです。
>の様な事であれば、特に、ですね。

ありがとうございます。そうですね、正規化がいまいち、出来ていないですね。

現実には、table_a もTable_b も user_id を持っていて、
user_id とmail_address でユニークになります。

継ぎ足し継ぎ足し出来ているシステムで、
正規化すると、修正ソフトがたくさん出てきて、
いつかはやらないととは思っているのですが、つい動いてるもので(^^ゞ

>
> 具体的にはmail_addressとそのインデックス値(例えばカラム名を ma_indexと
>でもしましょう)を持つテーブルを新設し、 table_a、 table_bから
>mail_addressを取り去りma_indexを追加します。
>
>
ありがとうございます。


>
>    松枝知直    <tomom@xxxxxxxxxx>
>            http://www.argus.ne.jp/~tomom/
>
>


[前][次][番号順一覧][スレッド一覧]

      9784 2004-07-07 07:33 [<ml_mysql@xxxxxxxxxx] EXCEPT のMysqlで代替方法。         
      9785 2004-07-06 23:39 ┗[ML account <ml@xxxxx]                                       
      9786 2004-07-06 23:47  ┣[ML account <ml@xxxxx]                                     
->    9787 2004-07-07 09:58  ┗[<ml_mysql@xxxxxxxxxx]