PostgreSQL中无匹配数据时如何返回指定null值记录
实现需求的SQL方案
可以实现这个需求,核心是通过条件判断+联合查询处理两种场景:有匹配记录时返回匹配结果,无匹配时返回col1、col2均为null的record3。
具体SQL语句
-- 先获取符合查询条件的记录 SELECT * FROM your_table WHERE col1 = 'c' OR col2 = 'd' UNION ALL -- 当无匹配记录时,返回col1和col2都为null的记录 SELECT * FROM your_table WHERE col1 IS NULL AND col2 IS NULL AND NOT EXISTS ( SELECT 1 FROM your_table WHERE col1 = 'c' OR col2 = 'd' );
逻辑说明
- 第一部分查询负责返回满足
col1='c' OR col2='d'的记录; - 第二部分通过
NOT EXISTS检查第一部分是否有结果:如果没有匹配记录,就返回col1和col2均为null的record3;如果有匹配结果,这部分不会返回任何数据; - 使用
UNION ALL而非UNION,因为两种场景不会产生重复数据,能提升查询性能。
场景验证
- 当查询条件为
col1='a' OR col2='b'时,第一部分返回record1和record2,第二部分的NOT EXISTS条件不成立,最终结果就是前两条记录,符合预期; - 当查询条件为
col1='c' OR col2='d'时,第一部分无结果,第二部分触发返回record3,满足需求。
内容的提问来源于stack exchange,提问作者Heisenberg
相关产品推荐
相关产品推荐

