如何从table_one(关联table_three)或table_two查询值并确定来源表?
实现方案
直接用UNION ALL合并两个查询,同时新增一个字段标记数据来源即可:
SELECT T1.*, 'table_one' AS source_table FROM table_one T1 JOIN table_three T3 ON T3.id = T1.foreign_key WHERE T3.field = 'value' UNION ALL SELECT T2.*, 'table_two' AS source_table FROM table_two T2 WHERE T2.field = 'value';
关键说明
UNION ALL负责拼接两个查询的结果,相比UNION不会做去重操作,性能更高效(如果业务不需要去重,优先用这个)source_table字段是自定义标识,每条数据都会明确显示来自table_one还是table_two- 如果
table_one和table_two的字段结构差异较大,建议不要用*,而是手动指定相同数量、对应类型的字段,避免拼接报错,示例如下:
SELECT T1.id, T1.name, T1.create_time, 'table_one' AS source_table FROM table_one T1 JOIN table_three T3 ON T3.id = T1.foreign_key WHERE T3.field = 'value' UNION ALL SELECT T2.id, T2.name, T2.create_time, 'table_two' AS source_table FROM table_two T2 WHERE T2.field = 'value';
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

