使用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);