查询多表UNION ALL结果时如何给每行标注所属表名且不修改原表结构
解决方案
你可以在每个UNION ALL的查询分支中新增一个固定值的标识字段,无需修改原表结构就能实现源表标记。
改造后的查询语句
SELECT *, 'TABLE1' AS source_table FROM TABLE1 UNION ALL SELECT *, 'TABLE2' AS source_table FROM TABLE2
说明
- 上述语句中新增的
source_table为自定义字段名,你可以根据需求修改名称。每个查询分支给该字段赋值为对应表的名称,返回结果中每一行都会携带该标识,可直接区分数据来源。 - 新增的字段为字符串常量,两个分支的字段数量、类型完全对齐,不会破坏UNION ALL的语法要求。
- 如果你后续需要基于该结果执行删除操作,搭配
source_table字段和原表的主键即可精准定位对应源表中的目标行,不会出现表间主键重复导致删错数据的问题。 - 稳定性建议:尽量避免使用
*查询,显式声明需要查询的字段,避免后续两张表的结构调整导致字段顺序错位、查询报错。
内容的提问来源于stack exchange,提问作者DorFik
相关产品推荐
相关产品推荐

