2011-09-16 17 views
0

私は他のサブクエリのセット内に存在しないすべてのユーザーを選択する必要があります。PLSQLの回避コードの重複

SELECT user_id 
FROM (<userSubQuery1>) 
WHERE 
    user_id NOT IN (<badUserSubQueryA>) AND 
    user_id NOT IN (<badUserSubQueryB>) AND 
    user_id NOT IN (<badUserSubQueryC>) 

は私だけではuserSubQuery、多くの異なるクエリでフィルタしていない操作を行う必要があり、 badUserSubQueriesは異なる場合があります。例:

SELECT user_id 
FROM (<userSubQuery2>) 
WHERE 
    user_id NOT IN (<badUserSubQueryB>) AND 
    user_id NOT IN (<badUserSubQueryC>) AND 
    user_id NOT IN (<badUserSubQueryD>) 

すべてのサブクエリ、Iから選択し、一度NOT INで使用してるものの両方が複雑なので、私は、サブクエリにないためのコードを複製する必要はありません多くの場合同じです(私の例ではbadUserSubQueryBとbadUserSubQueryC)。

私は動的SQLでこれを達成できましたが、私がそれを避けることができたら、私はむしろそうしませんでした。出来ますか?

答えて

2

フィルターをかけることができる索引付きの一時表にすべての悪いユーザーIDを保管する方法はありますか?

+1

Oracleでは、サブクエリごとにマテリアライズド・ビューを使用することもできます。 – Joe

+0

実際に開発プロセスの問題を解決するために、パフォーマンスへの影響やリソースの排水の実装を使用しないでください。 – APC

+0

すべてのbadUserSubQueriesの結果の和集合を持つplsqlコレクションを返す関数があると考えました。どのようにパフォーマンスの賢さを一時テーブルに入れるのと比べると? –

2

再利用する各複合サブクエリのビューを作成する方法はありますか?

+0

もし私も助けるだろうビューでuserSubQueryを入れます。しかし、私はまだ各組み合わせのための別のクエリ(より簡単ですが)を持っている必要があります。 –

0

私はこのようにそれで亀裂を持っているでしょう:

は、私はそれが

乾杯、 アレックス

を行く方法を知ってみましょう。この

SELECT user_id 
FROM (<userSubQuery1>) 
MINUS 
(
SELECT useri_id 
    FROM <badUserSubQueryB> 
UNION 
SELECT useri_id 
    FROM <badUserSubQueryC> 
UNION 
SELECT useri_id 
    FROM <badUserSubQueryD> 
) 

のように逆のロジックでこれを考えてみてください

関連する問題