2017-02-27 96 views
0

我想從同一個SP中選擇所有客戶或一個客戶。現在我們正在mantaining兩個SP來獲得這些信息:我的SQL:如果在where語句中添加條件?

即要獲得所有客戶:

select id, name from customers 

,並獲得一個客戶:

select id, name from customers 
where id=id_from_input 

使它們成爲通用,我想的將id_from_input定爲空以獲得所有客戶。我嘗試了幾種方法在sql中創建一個條件where語句,該語句可用於此計劃,但沒有任何工作。例如:

select id, name from customers 
where if(id_from_input <> null) id=id_from_input; end if 

給我語法錯誤。

如何在id_from_input爲空時返回所有行的where子句,否則爲匹配行?

+0

'CASE WHEN'是查詢了'IF'語法。 – Hexxed

回答

1

表達x <> null是不正確的;您只能使用is nullis not null來測試null。糾正你試圖給:

select id, name from customers 
where id_from_input is null or id = id_from_input 

或者一些更簡潔(恕我直言優雅):

select id, name from customers 
where id = coalesce(id_from_input, id) 
+0

這工作正常。正確答案。 – maverick

1

使用CASE語句來實現你的結果:

SELECT id, name FROM customers WHERE id = CASE WHEN ISNULL(id_from_input,'') 
<> '' THEN id_from_input ELSE id END 
0

嘗試使用or

select id, name 
from customers 
where id_from_input is null or id = id_from_input 

如果id_from_input爲null,則or條款將不被計算。

0

嘗試此查詢

select id, name from customers where CASE WHEN id_from_input<>null THEN id=id_from_input ELSE id END