使用SQL返回参数为NULL的所有值?

我不确定什么是正确的方法来做到这一点。

我基本上想要返回所有的值,如果没有定义某个filter的值。

获取请求是这样的filter:

url.com?filter1=abc&filter2=123&filter4=33

所以作为filter3没有定义我想要返回所有值,无论他们的filter3值是什么。 简单的逻辑权利。

但是,如果我尝试在SQL中实现,我卡住了。

SELECT * from TABLE_NAME WHERE filter1 = $1 AND filter2 = $2 AND filter3 = $3 AND filter4 = $4

我如何修改上面的SQL来响应未定义的/空值,并返回所有。 或者这是甚至是正确的策略。

如果你有索引,最好是build立自定义的SQL。 但是,如果performance不是一个问题(比如说表格很小),那就做一下明确的比较:

 SELECT * FROM TABLE_NAME WHERE ($1 IS NULL or filter1 = $1) AND ($2 IS NULL or filter2 = $2) AND ($3 IS NULL or filter3 = $3) AND ($4 IS NULL or filter4 = $4); 

如果该值被传递为NULL以外的其他NULL ,则相应地调整逻辑。 例如:

 WHERE ($1 = '' or filter1 = $1) AND ($2 = '' or filter2 = $2) AND ($3 = '' or filter3 = $3) AND ($4 = '' or filter4 = $4);