2017-03-15 79 views
1

我有一個REST端點是這樣的:選擇列名其中列名= all_values

www.icecreamstore.com/stock?brand=hershey&flavour=vanilla

現在,

兩個brandflavour是可選的。

所以下面也是完全有效的:

www.icecreamstore.com/stock?flavour=vanilla

www.icecreamstore.com/stock?brand=hershey

www.icecreamstore.com/stock

這些API映射到SQL查詢:

select count(*) from stock where brand=? and flavour=?

是否可以使用單個查詢,而不是爲每個請求參數組合編寫單獨的查詢。

另外,

是否有可能寫出這樣的查詢:

select count(*) from stock where brand=* and flavour=*

注:我與LIKE在沒有請求參數的情況下,使用column_name LIKE '%%'目前管理。但是,如果列不存儲字符串類型的值。

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

+0

我正在使用postgres –

回答

2

對於你的特殊情況,最簡單的方法可能是:

select count(*) 
from stock 
where brand = coalesce(?, brand) and flavour = coalesce(?, flavour); 

這假定brandflavour從來NULL

如果他們可以NULL,您可以使用is not distinct from

select count(*) 
from stock 
where brand is not distinct from coalesce(?, brand) and 
     flavour is not distinct from coalesce(?, flavour); 
0

要獲得所有值,您還可以在查詢中寫一個靜態值繞過第一條件是不正確的:

select count(*) 
from stock 
where (brand=<to get single> or 'allBrand'='allBrand') AND 
(flavour=<to get single> or 'allFlavour'='allFlavour')