2009-07-05 4 views
0

基本的に何らかのログデータがユーザに表示されていることを示すいい数字のDataGridViewがあります。 ユーザーは、地区、地域、居住地、通り別にフィルタリングできます。
はこれまでのところ、ComboBoxesは最初で唯一の地区が値を持っているので、一つだけを選ぶの後、および、地域1は、などが利用可能な値でコンボボックスをフィルタリングする

新しい要件がすべてということである、適切な値で満たされて、お互いにリンクされていますリストには実際にログテーブルに存在する値のみが表示されます。つまり、地区1に10の異なる地域があり、そのうちの2つだけがデータに表示されている場合は、その2つの地域のみを表示します。特に和解や路上では、合理的に聞こえるが、合計コードと使用コードの比率がはるかに高い。
私はこれを行う2つの主要な方法を考えました。
まず、私はフィルタリングすることができます参加:

select r.code, r.name 
from Region r 
join LogTable l on (r.code = l.regionCode) 
where r.districtCode = :districtCode; 

それとも私が副選択でこれを行うことができます。

select r.code, r.name 
from Region r 
where r.code in (select distinct l.regionCode 
       from LogTable l) 
     and r.districtCode = :districtCode 

第三の選択肢は、地区のすべての個別の値を読んで起動することです、地域logTaableに、決済と通りを入力してから、事前に計算されたin節でsubselectオプションを使用します。最初の読み込み後に入力された新しい値は表示されないため、少し柔軟性がないようです。

方法に大きな違いはありますか?あるいは、どちらもうまくいくでしょうか?

P.S. LogTableコードの列にインデックスが設定されているとは思えません。

答えて

0

Oracleにクエリアナライザがある場合は、3つのオプションで実行する必要があります。どちらが最速かを教えてくれるでしょう。また、LogTableにインデックスを追加する必要があるかどうかを示す必要があります。

+0

ええ、サブセレクトはほんの少し速かったです。だから私はそれを選んだ。 –

関連する問題