如果参数为NULL,则使用SQL返回所有值?

时间:2017-05-26 02:19:59

标签: mysql node.js postgresql

我不确定这样做的正确方法是什么。

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

使用以下过滤器获取请求:

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以响应undefined / blank值并返回all。或者这是否是正确的策略。

1 个答案:

答案 0 :(得分:2)

如果您有索引,最好构建自定义SQL。但是,如果性能不是问题(比如表格很小),那就进行明确的比较:

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以外的值传递,则相应地调整逻辑。例如:

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