【问题标题】:fetch all rows if where field is empty in postgres [closed]如果postgres中的where字段为空,则获取所有行[关闭]
【发布时间】:2021-11-05 10:08:20
【问题描述】:

我正在处理一个 sql 查询,其中我动态设置了字段,但很少有字段值可以为 null,如果它为 null,我想获取包含该列数据的所有记录。

喜欢:

Select * from users where name=:name and class=:class;

现在假设我只有名称变量而不是类的值,所以现在由于类变量不存在它会给出错误但我想在这种情况下获取所有类的用户?

我试过了,但它不起作用:

MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("name", request.params.name);
//run the query

我怎样才能做到这一点?

【问题讨论】:

  • 到目前为止你尝试过什么?你被困在哪里了?当你在 PostgreSQL 中需要某些东西时,为什么用 MySQL 来标记它?
  • 添加下一个
  • 如果参数值为空,将检索所有值?

标签: sql postgresql select where-clause


【解决方案1】:

如果参数值为NULL,则检索所有值。

-- PostgreSQL
SELECT * 
FROM users 
WHERE (name = param_name OR param_name IS NULL) 
    AND (class = param_class OR param_class IS NULL);

【讨论】:

  • 可以,但效果不佳。
  • 我同意@LaurenzAlbe。即使是强硬的解决方案也能提供正确的结果,如果表有很多行,这将是一个糟糕的解决方法。性能可能会变得非常糟糕。
  • 实际上从大表中检索所有行总是会影响性能。我根据提问者的需要编写了这个查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多