按可用值过滤ComboBox

时间:2009-07-05 05:51:29

标签: sql oracle

我有一个很好的DataGridView向用户显示基本上某种日志数据。 用户可以按地区,地区,居住地和街道进行过滤 到目前为止,ComboBoxes是相互关联的,因此首先只有区域有值,并且只有在选择一个区域后,区域1才会填充适当的值等。

新要求是所有列表仅显示日志表中实际存在的值。这意味着如果第1区有10个不同的区域,但只有2个区域出现在数据中,我只会显示这2个区域。听起来合理,特别是对于定居点和街道,总代码和使用代码之间的比例要高得多 我想到了两个主要的方法来做到这一点 首先,我可以使用join进行过滤:

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列上没有设置任何索引。

1 个答案:

答案 0 :(得分:0)

如果Oracle有一个查询分析器,你应该在你的三个选项上运行它。它会告诉你哪个是最快的。它还应该告诉您是否需要向LogTable添加索引。