You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何根据产品类型从不同表取值合并为同一别名列

解法1:LEFT JOIN + CASE WHEN 实现(推荐,性能更优)

先将product表分别和两个属性表做左关联,再根据type字段匹配取对应表的value即可,关联条件里加上type筛选可以减少无效关联的数据量:

SELECT
  p.product_id,
  CASE
    WHEN p.type = 'type1' THEN av1.value
    WHEN p.type = 'type2' THEN av2.value
  END AS value
FROM product p
LEFT JOIN attribute_value_1 av1 
  ON p.product_id = av1.product_id AND p.type = 'type1'
LEFT JOIN attribute_value_2 av2 
  ON p.product_id = av2.product_id AND p.type = 'type2';

解法2:UNION ALL 合并属性表再关联

如果后续会新增更多对应不同type的属性表,推荐用这种写法,扩展时只需要在UNION ALL下加新的属性表查询即可:

SELECT
  p.product_id,
  av.value
FROM product p
INNER JOIN (
  SELECT product_id, value, 'type1' AS type FROM attribute_value_1
  UNION ALL
  SELECT product_id, value, 'type2' AS type FROM attribute_value_2
) av ON p.product_id = av.product_id AND p.type = av.type;

以上两种写法都可以得到你期望的查询结果,如果同一个product_id在对应属性表中存在多条value记录,两种写法都会返回多行结果,符合常规关联逻辑。

内容的提问来源于stack exchange,提问作者JamesStandbridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:45:08