在 Asp.net 页面中组织一组 PL-sql 查询

Posted

技术标签:

【中文标题】在 Asp.net 页面中组织一组 PL-sql 查询【英文标题】:Organize a Set of PL-sql query in Asp.net page 【发布时间】:2013-05-20 15:52:51 【问题描述】:

我有一个用户可以选择多个值的界面:

输入 x:

   a , b , c , d .....(100 values for have an estimation ) 

输入y:

   aa, bb, cc, dd .... (100 values for have an estimation )

我只有 1 个查询应该根据输入 x 和 y 更改(where 条件)。

例如,如果用户选择:

  a,b (for x)

  aa,bb

查询应该是:

 select * from Table where condition1 = a and condition2 = aa

 select * from Table where condition1 = b and condition2 = aa

 select * from Table where condition1 = a and condition2 = bb

 select * from Table where condition1 = b and condition2 = bb

所以它是所有组合的笛卡尔积......

所以我的问题是如何优化查询?我不知道有人告诉我使用 NVL 功能

http://www.techonthenet.com/oracle/functions/nvl.php你能帮我把它放在一个好的结构上吗?谢谢

一件重要的事情:

用户不能为其中一个输入选择任何内容

【问题讨论】:

【参考方案1】:

你可以做condition1 in (x values list) and condition2 in (y values list)

试试这个

select * from Table 
where (@x is null or condition1 IN ('a','b')) 
and (@y is null or condition2 in ('aa','bb'));

例子:

WITH CTE AS
(
  SELECT 'a' COL1, 'aa' COL2 FROM DUAL
  UNION ALL
  SELECT 'a' COL1, 'bb' COL2 FROM DUAL
   UNION ALL
  SELECT 'a' COL1, 'cc' COL2 FROM DUAL
   UNION ALL
  SELECT 'b' COL1, 'aa' COL2 FROM DUAL
  UNION ALL
  SELECT 'b' COL1, 'bb' COL2 FROM DUAL
   UNION ALL
  SELECT 'b' COL1, 'cc' COL2 FROM DUAL
   UNION ALL
  SELECT 'b' COL1, null COL2 FROM DUAL
)

select * from cte where col1 in ('a','b') and col2 in ('aa','bb');

SQL DEMO

【讨论】:

对不起,你能解释一下这是如何工作的吗?我的表名在哪里? @frank,这是一个示例,您复制该 sql 并对其进行修改以包含您的表和列。我用与您的问题匹配的 sql 更新了帖子。 ahhhhhhhh 好的,这是一个展示如何使用“In”语句的示例 您是否认为从性能的角度来看,如果我有 100 x 100 的值,在声明中会非常快吗? 您现在如何返回数据?性能方面有多糟糕?

以上是关于在 Asp.net 页面中组织一组 PL-sql 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 页面上多次重用变量

如何在 ASP.NET MVC 中组织 DAL [关闭]

如何在 ASP.NET 中组织数据访问层 (DAL)

asp.net 重写OnException返回json或跳转新页面

如何在 ASP.NET MVC 3 中发布一组文件?

ASP.NET MVC 2 - 组织