如何使用SQL简单实现两表合并,补全另一表的缺失字段值?
该需求完全可以通过SQL实现,核心逻辑是基于唯一主键ID匹配两张表的行,用非空值补全空缺字段即可,具体操作方案如下:
方案1:JOIN + 空值合并函数(推荐,ID完全匹配场景下性能最优)
使用INNER JOIN关联两张表,通过COALESCE函数取第一个非空值作为最终字段结果,几乎所有主流数据库(MySQL、PostgreSQL、SQL Server等)均支持该函数:
SELECT t1.ID, t1.Name, COALESCE(t2.Title, t1.Title) AS Title, COALESCE(t2.Age, t1.Age) AS Age FROM table1 t1 INNER JOIN table2 t2 ON t1.ID = t2.ID;
如果使用的是MySQL,也可以用IFNULL(t2.Title, t1.Title)替代COALESCE,效果完全一致。
方案2:UNION ALL + 聚合(适合ID不完全重合的场景)
如果两张表的ID可能存在一方缺失的情况,可以先合并两个表的所有行,再通过聚合函数忽略空值取有效内容:
SELECT ID, Name, MAX(Title) AS Title, MAX(Age) AS Age FROM ( SELECT * FROM table1 UNION ALL SELECT * FROM table2 ) AS combined_table GROUP BY ID, Name;
该方案利用了MAX聚合函数会自动忽略NULL值的特性,最终会自动选取同ID下存在的非空值作为结果,容错性更高。
内容的提问来源于stack exchange,提问作者vimal
相关产品推荐
相关产品推荐

