2009-07-05 91 views
0

我有一個不錯的DataGridView顯示基本上某種類型的日誌數據給用戶。 用戶可以按地區,地區,定居點和街道進行過濾。
到目前爲止,ComboBoxes鏈接到對方,所以起初只各區都有價值,只有一個採摘後,該地區一個充滿了正確的價值觀等按可用值過濾組合框

了新的要求是,所有該列表將只顯示實際存在於日誌表中的值。這意味着如果1區有10個不同的區域,但只有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 Code列上有任何索引。

回答

0

如果Oracle有一個查詢分析器,您應該在三個選項上運行它。它會告訴你哪個是最快的。它還應該告訴你是否需要向LogTable添加索引。

+0

是的,子選擇只是更快一點。所以我選擇了它。 – 2009-07-08 08:46:05