如何合并两张表并覆盖重复行:保留Table 1匹配行数据
实现表合并并优先保留指定表数据的SQL方案
需求说明
合并Table 1与Table 2为一张表:
- 当两张表的
Account Code相同时,保留Table 1中的Amount数据 - 仅存在于其中一张表的行全部保留
示例数据
Table 1
| Account Code | AccountName | Project Type | Desc | Period | Amount |
|---|---|---|---|---|---|
| Bcc1 | AccountBone | AA | Good | 11/30/2022 | 700 |
| Acc1 | AccountOne | AA | Good | 12/1/2022 | 300 |
Table 2
| Account Code | AccountName | Project Type | Desc | Period | Amount |
|---|---|---|---|---|---|
| Acc1 | AccountOne | AA | Good | 12/1/2022 | 220 |
| Acc2 | AccountOne | AA | Good | 12/2/2022 | 432 |
期望结果表
| Account Code | AccountName | Project Type | Desc | Period | Amount |
|---|---|---|---|---|---|
| Bcc1 | AccountBone | AA | Good | 11/30/2022 | 700 |
| Acc1 | AccountOne | AA | Good | 12/1/2022 | 300 |
| Acc2 | AccountOne | AA | Good | 12/2/2022 | 432 |
SQL查询语句
SELECT COALESCE(t1.`Account Code`, t2.`Account Code`) AS `Account Code`, COALESCE(t1.AccountName, t2.AccountName) AS AccountName, COALESCE(t1.`Project Type`, t2.`Project Type`) AS `Project Type`, COALESCE(t1.Desc, t2.Desc) AS Desc, COALESCE(t1.Period, t2.Period) AS Period, COALESCE(t1.Amount, t2.Amount) AS Amount FROM Table1 t1 FULL OUTER JOIN Table2 t2 ON t1.`Account Code` = t2.`Account Code`;
语句说明
FULL OUTER JOIN:保留两张表中所有匹配和不匹配的行,确保无数据丢失COALESCE()函数:- 针对
Amount字段,优先取Table1的值,仅当Table1无对应记录时才用Table2的值,满足相同Account Code保留Table1数据的规则 - 其他字段用
COALESCE()是为了确保无论数据来自哪张表,都能获取到有效值(若实际场景中匹配行的其他字段存在差异,可按需调整优先级)
- 针对
内容的提问来源于stack exchange,提问作者Arif
相关产品推荐
相关产品推荐

