【问题标题】:Return all values if parameter is NULL using SQL?如果使用 SQL 的参数为 NULL,则返回所有值?
【发布时间】:2017-10-26 19:37:58
【问题描述】:

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

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

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

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 以响应未定义/空白值并全部返回。或者这甚至是正确的策略。

【问题讨论】:

  • 如果您正在处理请求,为什么不使用不同的 SQL 命令?还是根据您拥有的参数构建命令?你在后端使用什么?
  • 您的建议可能是更好的方法,您能否举个例子。这就是我想到的事情,所以我正在这样做。 Other 用于 if else 用于根本不扩展的每个条件。五个参数意味着 5 个 if else 语句。

标签: mysql node.js postgresql


【解决方案1】:

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

【讨论】:

  • 通常我认为它是空白的,我会为空白字符串或数字输入什么。在 nodejs 中,这是代码:db.query( "SELECT * FROM TABLE WHERE C_1 = $1 AND C_2 = $2", ['test', undefined]")...不确定undefined 变成了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多