如何在PostgreSQL中结合CASE表达式与WHERE子句实现单查询过滤?
单查询实现分支过滤的两种写法
方法1:用逻辑运算符直接组合(推荐,性能更优)
这种写法本质是把两个查询的过滤条件用OR拼接,逻辑上和分开执行两个查询完全一致,PostgreSQL的查询优化器能很好地处理这类条件:
SELECT * FROM [my-table-name] WHERE (column1 = 0 AND condition1) OR (column1 <> 0 AND condition2);
方法2:使用CASE表达式实现分支判断
如果一定要用CASE表达式,可以在WHERE子句中通过CASE返回的布尔结果来过滤:
SELECT * FROM [my-table-name] WHERE CASE WHEN column1 = 0 THEN condition1 ELSE condition2 END;
注:这里
condition1和condition2都必须是能返回布尔值的条件(比如column3 < 100、column4 = 'active'这类),CASE表达式会根据column1的值返回对应条件的结果,只要结果为TRUE就会选中该行。
两种写法都能满足你的需求,优先推荐方法1,因为它的可读性更强,且数据库更容易生成高效的执行计划。
内容的提问来源于stack exchange,提问作者hafis
相关产品推荐
相关产品推荐

