在我的Ruby on Rails应用程序中,我使用blazer(https://github.com/ankane/blazer),我有以下sql查询:

SELECT *
FROM survey_results sr
LEFT JOIN clients c ON c.id = sr.client_id
WHERE sr.client_id = {client_id}

这个查询非常有效.但我需要添加条件逻辑来判断client_id变量是否存在.如果是,则我按此变量过滤,如果不是,则我不启动此where子句.我如何在PostgreSQL中做到这一点?

推荐答案

判断其是否为空或您的条件是否如下:

WHERE {client_id} IS NULL OR sr.client_id = {client_id}

WHERE子句的计算如下:如果变量为空,则WHERE子句的计算结果为true,因此-无筛选器.如果不是,则继续到OR的下一个状态

Postgresql相关问答推荐

从子查询中的排序结果中获取前X行

分区可以用于postgres中的同类查询吗?

ANTLR4 PostgreSQL语法被 destruct 了吗?

Pogresql性能中的枚举与文本数据类型

安装age-installation时出错

JPA将没有时区的Postgres时间戳调整为服务器时区

Postgres 使用不同元素数据类型的订单数据

postgres hierarchy - 用祖先的值填充缺失值

如何在不同的行中显示两列,避免重复并省略空条目

在执行 postgresql 函数时提交事务

Heroku PGError:operator does not exist: character varying = integer

在postgres的同一列中存储不同数据类型的合理方法?

使用 try/except 与 psycopg2 或with closing?

如何将1 天 01:30:00等间隔转换为25:30:00?

从长时间的postgres转换日期

PostgreSQL 表变量

没有函数匹配给定的名称和参数类型

PostgreSQL 多种认证方式

在 Postgres 9.0+ 中使用 PL/pgSQL 在表上循环

如何在 PostgreSQL 中生成一系列重复数字?