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

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

问题描述:

我不知道什么是正确的方法来做到这一点。如果参数为NULL,使用SQL返回所有值?

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

Get请求与过滤器了这样:

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

从而filter3没有定义,我想返回所有值的过滤器3的值是无论使用什么。简单的逻辑正确。

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

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

如何修改上面的SQL以响应未定义/空值并返回全部。或者这是甚至正确的策略。

+0

如果您在处理请求,为什么不使用不同的SQL命令?或者根据你有的参数建立命令?你在后端使用什么? –

+0

你的建议可能是更好的方法,你能举个例子。这是一些想到的东西,所以我正在做。其他的则用于其他情况,但对于每一种根本不能缩放的情况。五个参数意味着5条if else语句。 –

如果您有索引,最好是构建自定义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); 
+0

通常我认为它是空白的,我会为空白字符串或数字放什么。在nodejs中,这是代码:'db.query(“SELECT * FROM TABLE WHERE C_1 = $ 1 AND C_2 = $ 2”,['test',undefined]“)......不确定'undefined'变成了什么 –