我有一個不錯的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列上有任何索引。
是的,子選擇只是更快一點。所以我選擇了它。 – 2009-07-08 08:46:05