SQL查询不存在记录返回指定JSON值 是否有更简洁高效的实现
优化实现方案
核心逻辑是先构造你需要查询的所有目标ID集合,再和products表做左关联,不需要重复写子查询和UNION语句,性能和可读性都远优于你当前的实现:
SELECT json_build_object( 'has_product', CASE WHEN p.product_id IS NOT NULL THEN 'true' ELSE 'false' END, 'product_id', p.product_id ) FROM ( -- 此处填写所有需要查询的产品ID即可 SELECT UNNEST(ARRAY[10, 65, 75]) AS target_id ) t LEFT JOIN products p ON p.product_id = t.target_id;
如果你的数据库不支持UNNEST函数,可以用VALUES语法构造目标ID列表,兼容性更强:
SELECT json_build_object( 'has_product', CASE WHEN p.product_id IS NOT NULL THEN 'true' ELSE 'false' END, 'product_id', p.product_id ) FROM ( VALUES (10), (65), (75) ) AS t(target_id) LEFT JOIN products p ON p.product_id = t.target_id;
方案优势
- 性能更高:仅需对products表执行一次查询,不会随查询ID数量上升线性增加查询次数
- 维护成本更低:新增查询ID仅需在数组/VALUES列表中添加元素,无需重复编写逻辑代码
- 完全匹配需求:存在的产品返回
has_product=true和对应ID,不存在的产品自动返回has_product=false和product_id=null
内容的提问来源于stack exchange,提问作者toh19
相关产品推荐
相关产品推荐

