2012-07-27 115 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