有结构相同的分表A及总表B,将表A数据汇总到表B。汇总时,根据条件,若A数据存在于B表中,则更新,若不存则插入。我们可采用merge into语句,它可以同时实现update和insert的功能,动态拼接成merge into语句让数据库执行操作。
若用java来实现,由merge into的语法特点知,需要对on条件,insert,update进行多处循环拼接字段,update处还需要去掉主键字段或索引字段,拼接SQL语句的一系列操作并不容易。用其它开发语言也面临类似的问题。
使用SPL对字段序列循环处理,实现相对容易且代码精简。
下面以同结构的源表P_HOUSE向目标表T_HOUSE数据汇总说明,其中由ID与NODE_ID组成主键。
P_HOUSE | ID | NODE_ID | NAME | ADDRESS | CREATE_DATE |
1 | 100 | A | A1 | 2018-02-06 | |
1 | 300 | A | A10 | 2018-04-06 | |
2 | 100 | B | B2 | 2018-03-01 | |
2 | 300 | B | B20 | 2018-01-01 | |
3 | 100 | C | C3 | 2018-03-04 | |
3 | 300 | C | C30 | 2018-05-07 | |
10 | 300 | A | A10 | 2018-06-06 | |
20 | 300 | B | B20 | 2018-06-08 | |
30 | 300 | C |