PostgreSQL条件where子句

Mat*_*ski 9 ruby sql postgresql ruby-on-rails

在我的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}
Run Code Online (Sandbox Code Playgroud)

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

sag*_*agi 20

检查它是否为空或您的条件如下:

WHERE {client_id} IS NULL OR sr.client_id = {client_id}
Run Code Online (Sandbox Code Playgroud)

WHERE子句评估如下:如果变量为空,则WHERE子句计算为true,因此 - 没有过滤器.如果没有,它继续下一个条件OR