从table中选择column_name = all_values的column_name

时间:2017-03-15 10:23:52

标签: sql postgresql

我有一个这样的REST端点:

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 '%%'。但是如果列不存储string类型的值,那该怎么办呢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

要获取所有值,您还可以在查询中写入静态值,以便在第一个条件不为真时绕过:

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