如何基于主键将一个表的列值追加到另一个表的对应查询结果中
实现方案
这个需求完全可实现,核心通过结果集合并逻辑完成,以下是具体操作:
方案1:查询单个指定prod_id的合并结果
直接用UNION ALL拼接两个结果集即可,以查询prod_id=1为例:
SELECT prod_filter AS filter_value FROM tab_risk WHERE prod_id = 1 UNION ALL SELECT add_in_filter AS filter_value FROM ref_filter;
执行后返回结果就是你要求的Falcon、Powerpoint、Word、Email四个值。
方案2:批量查询所有prod_id的合并结果
如果需要一次性返回所有prod_id对应的合并后filter值,可以用笛卡尔关联加合并逻辑:
-- 保留重复值版本 SELECT t.prod_id, t.prod_name, t.prod_filter AS filter_value FROM tab_risk t UNION ALL SELECT t.prod_id, t.prod_name, r.add_in_filter AS filter_value FROM tab_risk t CROSS JOIN ref_filter r ORDER BY t.prod_id, filter_value;
如果需要筛选特定prod_id,在SQL末尾加WHERE t.prod_id = 你要的ID即可。
注意事项
- 若你的场景需要排除重复值(比如prod_id=3的原prod_filter是
Powerpoint,和ref_filter中的值重叠,不需要返回两次),把上面的UNION ALL替换为UNION即可。 - 需要自定义排序的话,在SQL末尾补充
ORDER BY子句即可。
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

