Rails或PostgreSQL查询指定SKU无匹配时返回价格为0的方法
PostgreSQL 原生实现方案
你可以通过左关联临时SKU列表的方式直接返回符合要求的结果,无需额外遍历处理,SQL语句如下:
SELECT s.sku, COALESCE(p.price, 0) AS price FROM unnest(ARRAY['001', '002', '003']) AS s(sku) LEFT JOIN products p ON p.sku = s.sku;
逻辑说明:先用unnest将你需要查询的SKU数组转为临时行表,再和商品表左关联,用COALESCE函数将不存在的SKU对应的空价格默认设为0,查询结果会直接包含所有你指定的SKU。
Rails 层面实现方案
如果不想写原生SQL,也可以用Rails自带的方法快速生成目标哈希,全程不需要手动写循环遍历:
# 定义你需要查询的SKU列表 target_skus = ['001', '002', '003'] # 查出数据库中存在的SKU对应的价格,转成哈希 exist_sku_map = Product.where(sku: target_skus).pluck(:sku, :price).to_h # 生成带默认值的完整结果哈希 result = target_skus.index_with { |sku| exist_sku_map.fetch(sku, 0) }
最后直接调用result.to_json就能得到你要求的JSON格式输出。
内容的提问来源于stack exchange,提问作者Remy Wang
相关产品推荐
相关产品推荐

