PostgreSQL中如何提取多关联表中date_added列的年月并去重?
实现多表关联年月数据的数据库端去重查询
方案说明
直接利用数据库的UNION操作合并多张关联表的年月数据,自动完成去重,后续新增表只需扩展SQL即可,不用改后端逻辑。
最终SQL代码
-- 提取tableOne中关联primaryTable的年月数据 SELECT DATE_FORMAT(date_added, '%m-%Y') AS month_year FROM tableOne WHERE EXISTS ( SELECT 1 FROM primaryTable pt WHERE pt.id = tableOne.primary_id -- 替换为实际关联字段 ) UNION -- 提取tableTwo中关联primaryTable的年月数据 SELECT DATE_FORMAT(date_added, '%m-%Y') AS month_year FROM tableTwo WHERE EXISTS ( SELECT 1 FROM primaryTable pt WHERE pt.id = tableTwo.primary_id -- 替换为实际关联字段 ) UNION -- 提取tableThree中关联primaryTable的年月数据 SELECT DATE_FORMAT(date_added, '%m-%Y') AS month_year FROM tableThree WHERE EXISTS ( SELECT 1 FROM primaryTable pt WHERE pt.id = tableThree.primary_id -- 替换为实际关联字段 );
重点提示
UNION自带去重效果,不需要额外加DISTINCT,比UNION ALL + DISTINCT效率更高DATE_FORMAT的%m会输出两位月份(如01、12),如果需要一位月份可以换成%cEXISTS用来过滤出和primaryTable关联的数据,确保数据关联性,替换语句中的primary_id为各子表实际的关联字段名- 后续新增关联表时,只需要在SQL末尾追加
UNION + 新表的年月查询语句即可,无需修改后端代码
内容的提问来源于stack exchange,提问作者new line
相关产品推荐
相关产品推荐

