如果参数为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以响应未定义/空值并返回全部。或者这是甚至正确的策略。
答
如果您有索引,最好是构建自定义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'变成了什么 –
如果您在处理请求,为什么不使用不同的SQL命令?或者根据你有的参数建立命令?你在后端使用什么? –
你的建议可能是更好的方法,你能举个例子。这是一些想到的东西,所以我正在做。其他的则用于其他情况,但对于每一种根本不能缩放的情况。五个参数意味着5条if else语句。 –