PostgreSQL单查询实现:存在对应ProductId返回其值,不存在则返回Global默认值
实现方案
方式1:使用COALESCE+子查询(逻辑最直观)
优先取目标ProductId对应的Value,查询结果为空时自动兜底取Global的Value:
-- 替换单引号内的P456为你要查询的ProductId即可 SELECT COALESCE( (SELECT Value FROM Product WHERE ProductId = 'P456'), (SELECT Value FROM Product WHERE ProductId = 'Global') ) AS final_value;
方式2:使用排序+LIMIT(适合索引优化场景)
同时匹配目标ID和Global的两条记录,把目标ID的记录排序优先级调高,取第一条即可:
-- 替换IN条件里的P456为你要查询的ProductId即可 SELECT Value FROM Product WHERE ProductId IN ('P456', 'Global') ORDER BY CASE ProductId WHEN 'Global' THEN 2 ELSE 1 END LIMIT 1;
注意事项
- 两种写法均默认表中
ProductId = 'Global'的记录一定存在,如果存在Global记录也缺失的场景,可以在COALESCE最后再加固定默认值兜底 - 如果ProductId字段建立了索引,两种写法的查询效率都很高,小表场景下无性能差异
内容的提问来源于stack exchange,提问作者Anil V K Babu
相关产品推荐
相关产品推荐

