在单个SQL中获取数据表筛选器列表

时间:2017-10-18 21:30:19

标签: sql oracle

我有一个列出表中记录的页面。在表的标题中,我们有过滤器过滤掉所选值的记录。为了填充这些过滤器列表,我需要从数据库中获取不同的值。例如,当列出一家公司的员工让我们说我有名称,年龄,工资的过滤器时,那么我有单独的查询,如

select distinct name from employee where company = `fordwagen`

如何在单个SQL中获取名称,年龄和工资的所有三个列表,而不是有三个数据库调用?

3 个答案:

答案 0 :(得分:2)

select name as filter_value, 'name_filter' as filter_type from employee group by name
union
select ages as filter_value, 'age_filter' as filter_type from employee group by ages
union
select salary as filter_value, 'salary_filter' as filter_type from employee group by salary

group by将具有与distinct不同的效果,您可以使用任一语法。这会为您提供filter_valuefilter type的列表。使用正确的filter_type填充每个筛选器列表。

希望我能得到你在这里问的权利...如果我不在的话评论

答案 1 :(得分:1)

会有那么多重复的名字吗?一家满是史密斯先生和夫人的公司?可能不是。

如此简单

select first_name, last_name, age, salary from employees;

得到1000个员工记录,而不是250个名字,700个姓氏,30个年龄和120个薪水。然后循环浏览应用中的记录,尽可能减少流量。

答案 2 :(得分:0)

  
      
  1. 我不想花时间为每个列表输入数据库,实际上我有十多个列表。
  2.   

无论您发出十个单独的呼叫还是一个组合呼叫,网络流量 - 数据包的数量 - 大致相同。

  
      
  1. 即使我使用连接池,我也不想在同一页面上多次点击数据库。
  2.   

好。但这更多的是你如何设计你的应用程序层。

  
      
  1. 我需要为不同的数据库调用创建不同的方法,我不希望在需求发生变化的情况下在很多地方进行更改。
  2.   

你似乎对“清洁代码”有一种不同寻常的理解。单一责任原则(SOLID中的 S )是清洁代码的基石。有十种方法,每种方法做一件事比一件做十件事的方法更清洁。

也许您需要的是缓存?如果过滤器的目标表相对缓慢变化,那么结果集缓存可能非常有效。 Oracle在数据库和客户端都支持缓存 - 内置失效。 Find out more。即使您的目标表经常更改,也许您可​​以维护更静态的过滤器表。