2012-07-27 112 views
5

我有这需要的是在where子句让所有结果使用where子句

功能(串x)使用的参数的函数 - >现在,这将创建一个SQL查询,这给

select colname from tablename where columnname=x; 

现在我想这一功能给所有行即查询相当于

select colname from tablename; 

当我通过X =“全部”。

我想创建一个通用查询,当我通过“全部”,那么它应该返回我所有的行其他筛选我的结果。

回答

4

只是离开了哪里的条件。

如果你真的想那么复杂使用

where columnname LIKE '%' 

这只会过滤空值。

0

如果您必须允许将'ALL'作为参数值传递给函数,那么您需要在函数中放置一些操作代码来相应地构造SELECT语句。即您可以检测参数中是否包含“ALL”,然后从SQL语句中省略WHERE子句。如果“ALL”以外的值经过,则可以将WHERE子句与参数中的相关过滤器值一起包含在内。

这样做的一段代码的例子是;

IF x = 'ALL' 
THEN 
    SELECT COLNAME FROM TABLENAME; 
ELSE 
    SELECT COLNAME FROM TABLENAME WHERE COLUMNNAME = X; 
END IF; 
0

目前还不清楚你所使用的语言为你的功能,但是你必须以某种方式对“所有”之前获得到SQL解析:

public void query(String param) { 
    String value = "": 
    switch (param) { 
    case 'All': 
     value = "*"; 
     break; 
    default: 
     value = param; 
    } 
    String sql = "select colname from tablename where colname="+value; 
    //make the query 
} 
+0

这是不明确的,但在字里行间,他们似乎是在MySQL中使用PL/SQL。 – 2012-07-27 06:30:01

6
select colname from tablename 
where columnname=(case when @x ="All" then columnname 
        else @x end) 
0

给有条件的支票你的代码(假设Java)来追加WHERE条款,只有当x != 'All'

mySqlQuery = "SELECT colname FROM tablename" + 
       (x.equals("All") ? "" : "WHERE columnname = "+x); 
2

试试这个

select colname from tablename where 1=1 

希望以上将工作

0

我前一段时间有同样的问题,这个解决方案为我

select colname from tablename where columnname=x or x = 'ALL' 
+0

谨慎阐述? – RamenChef 2016-11-29 20:09:40

+0

where子句中的“or”在这里执行这个技巧。如果满足条件columnname = x,则where子句过滤结果。其他如果x ='ALL'则where子句被绕过。从而移除过滤器。 – 2017-04-26 13:51:11