MySQL多表查询结果合并为单表格式(类全外连接实现)
问题描述
现有三张数据表T1、T2、T3,结构及数据如下:
T1
id, count 1, 10 2, 20 3, 30
T2
id, status 1, 100 2, 200 3, 300 4, 400
T3
id, refresh 2, 2000 3, 3000
需要将三张表的第二列合并为一个结果集,得到包含id、count、status、refresh的结果,无对应数据的位置填充NULL,预期结果如下:
id, count, status, refresh 1, 10, 100, NULL 2, 20, 200, 2000 3, 30, 300, 3000 4, NULL, 400, NULL
不确定全外连接是否支持该格式,寻求更优实现方法。
解决方案
以下是实现该需求的SQL语句:
SELECT COALESCE(T1.id, T2.id , T3.id) AS id, T1.count, T2.status, T3.refresh FROM T1 LEFT OUTER JOIN T2 USING (id) LEFT OUTER JOIN T3 USING (id) UNION SELECT COALESCE(T1.id, T2.id , T3.id) AS id, T1.count, T2.status, T3.refresh FROM T2 LEFT OUTER JOIN T1 USING (id) LEFT OUTER JOIN T3 USING (id) UNION SELECT COALESCE(T1.id, T2.id , T3.id) AS id, T1.count, T2.status, T3.refresh FROM T3 LEFT OUTER JOIN T1 USING (id) LEFT OUTER JOIN T2 USING (id)
该方案通过UNION组合三个左连接查询的结果,确保所有表中的id都被覆盖;利用COALESCE函数确定最终的id值,无匹配数据的字段自动填充NULL,完全符合预期结果要求。
内容的提问来源于stack exchange,提问作者TheDataGuy
相关产品推荐
相关产品推荐

