如何修改MySQL Union查询以明确结果数据的来源表?
解决方法:添加来源表标识字段
很简单,只需要在每个子查询里手动新增一个固定值的字段,用来标记这条记录到底来自t1还是t2表就可以了。
推荐使用UNION ALL(更高效,保留所有记录)
因为你原来的查询返回了2+3=5条记录,说明两个表的结果没有重复,用UNION ALL不会做额外的去重操作,性能更好:
SELECT *, 't1' AS source_table FROM t1 WHERE product = 'ABC' UNION ALL SELECT *, 't2' AS source_table FROM t2 WHERE product = 'ABC';
这个查询会在结果里多一列source_table,每条记录的这个字段值要么是t1要么是t2,一眼就能看出来源。
如果需要去重(保留UNION逻辑)
如果你的场景中两个表可能存在完全相同的记录(除了来源表),并且你希望合并这些重复项,那可以继续用UNION,但要注意:因为新增了source_table字段,即使其他字段完全一致,来自不同表的记录也会被视为不同的记录保留,这正好符合你要区分来源的需求:
SELECT *, 't1' AS source_table FROM t1 WHERE product = 'ABC' UNION SELECT *, 't2' AS source_table FROM t2 WHERE product = 'ABC';
小提醒
你原来的查询里product = ABC可能会报错,因为MySQL会把ABC识别为列名,正确的写法应该是用单引号包裹字符串常量:product = 'ABC'。
内容的提问来源于stack exchange,提问作者موسى دريهم
相关产品推荐
相关产品推荐

