如何用SQL合并两张表并在同行展示差异值?
SQL合并两张表并展示Count列差异的解决方案
你需要用**全外连接(FULL OUTER JOIN)**来实现需求,UNION之所以不行是因为它是纵向合并行记录,而你要的是把同一Name对应的两个Count值横向展示在同一行。
具体SQL语句
SELECT COALESCE(t1.Name, t2.Name) AS Name, COALESCE(t1.Count, 0) AS "Count table 1", COALESCE(t2.Count, 0) AS "Count table 2" FROM Table1 t1 FULL OUTER JOIN Table2 t2 ON t1.Name = t2.Name ORDER BY Name;
语句说明
- FULL OUTER JOIN:保留两张表中所有的Name记录,不管另一张表是否有匹配的Name,这样能覆盖
Fith(仅在Table1)和Sixth(仅在Table2)这类情况。 - COALESCE函数:用来处理缺失值,当某张表没有对应Name的Count时会返回NULL,用
COALESCE(字段, 0)把NULL替换成0,符合预期结果的展示要求。 - ORDER BY Name:让结果按Name排序,和你给出的预期结果顺序一致,可根据需求调整。
如果你的数据库不支持FULL OUTER JOIN(比如MySQL),可以用UNION ALL先收集所有Name,再分别关联两张表:
SELECT all_names.Name, COALESCE(t1.Count, 0) AS "Count table 1", COALESCE(t2.Count, 0) AS "Count table 2" FROM ( SELECT Name FROM Table1 UNION ALL SELECT Name FROM Table2 ) AS all_names LEFT JOIN Table1 t1 ON all_names.Name = t1.Name LEFT JOIN Table2 t2 ON all_names.Name = t2.Name GROUP BY all_names.Name ORDER BY all_names.Name;
内容的提问来源于stack exchange,提问作者plategt
相关产品推荐
相关产品推荐

