2016-05-27 1 views
2

これを達成する方法を誰かが指摘できるかどうか疑問に思っていました。MYSQLの結果を保存し、別のクエリでIN文として使用する

私はかなり重いクエリを持っています(主に、毎日何千もの購入で過去10年間のレコードの量が原因です)。

はとにかくそれはこの場合には、このような何か(複数が関与ジョイン)

SELECT customerNumber from purchaseOrder where somestatus = someStatus; 

複数ある加入したが、私は顧客数が、彼らは以来、関係を介して接続していないされているかを知りたいでしょう簡素化注文は、登録されていない人が一度だけ買うこともできます。

今、このクエリは約950レコードになります。ロードには最大30秒かかります(これは問題ありません)。

は、しかし、今、私は再び別のクエリ例えばで結果を使用する。:

SELECT * from registeredUsers wherestatus 
IN(Some values which mean the account is not active) 
and customerNumber in (results from query 1). 

私がIN部分に番号を貼り付けるときに、この2番目のクエリはかなり速いです。しかし、私は動的に動作するようにしたいと思っています。なぜなら、異なるケースに対してクエリ2のいくつかのバリエーションを作成する必要があるからです。

これはオプションですか?

私は結果を変数に入れようとしましたが、 "Subquery returns multiple rows"エラーが発生します。

これを行う他の方法はありますか?一時的なテーブルを作成しようと思っていましたが、それはうまくいくでしょうか?

+0

http://stackoverflow.com/questions/13116042/how-toにインデックスを持っていない場合は、一時テーブルからインデックスをスキップすることができます-pass-a-of-a-in-clause – Ramesh

+0

これはできません。しかし、ありがとう –

答えて

1

はい一時テーブルがここに移動する方法です。 query 1の結果をテンポラリテーブルに格納し、query 2select *をサブクエリのテンポラリテーブルから使用します。

CREATE temporary table temp (index (customerNumber)) 
    SELECT customerNumber from purchaseOrder where somestatus = someStatus; 

SELECT * from registeredUsers wherestatus 
    IN(Some values which mean the account is not active) 
    and customerNumber in (SELECT * from temp); 

あなたregisteredUsers表はcustomerNumber

私はこれが役に立つかもしれません推測
+0

ありがとうございました。私は問題を解決しました。私は将来それを必要とするかもしれません。 –

関連する問題