PostgreSQL中如何用表A的id匹配查询表B的三个关联ID字段
PostgreSQL关联查询实现方案
基础关联查询(保留所有A表记录)
直接通过多字段OR条件关联两张表,写法直观,适合中小数据量场景:
SELECT a.id, a.folder, b.hours, b.name -- 按需保留B表字段 FROM a LEFT JOIN b ON a.id = b."Folder Id" OR a.id = b."Space Id" OR a.id = b."List Id" ORDER BY a.id;
注意:表B的字段名包含空格,PostgreSQL中引用带特殊字符/空格的字段必须用双引号包裹,否则会触发标识符识别错误。如果不需要保留无匹配的A表记录,将
LEFT JOIN替换为INNER JOIN即可。
聚合统计查询(计算每个id对应总时长)
如果需要统计每个A表id匹配到的总工作时长,可以使用横向子查询实现,统计逻辑更清晰:
SELECT a.id, a.folder, COALESCE(SUM(b.hours), 0) AS total_hours FROM a LEFT JOIN LATERAL ( SELECT hours FROM b WHERE a.id IN ("Folder Id", "Space Id", "List Id") ) b ON true GROUP BY a.id, a.folder ORDER BY a.id;
内容的提问来源于stack exchange,提问作者val ezeh
相关产品推荐
相关产品推荐

