1、问题
比较table1和table2两个表中数据差异,将差异数据插入table3中。table1、table2、table3表结构相同,差异数据需要比较type、key、value三个字段 table1中数据如下: mysql> select * from table1; +----+------+--------------------+-------+------+ | id | type | key | value | desc | +----+------+--------------------+-------+------+ | 1 | 1 | 19353600611478353H | 91 | NULL | | 2 | 1 | 19353400733629439Y | 74 | NULL | | 3 | 1 | 1935310026017260XP | 58 | NULL | | 4 | 1 | 1935320066474298XL | 85 | NULL | | 5 | 1 | 19353500665066864F | 70 | NULL | | 6 | 1 | 19353200751605000A | 63 | NULL | | 7 | 1 | 19353600587527169N | 58 | NULL | | 8 | 1 | 19353200612261252T | 65 | NULL | | 9 | 1 | 193532005562039629 | 75 | NULL | | 10 | 1 | 19353200155011310C | 66 | NULL | +----+------+--------------------+-------+------+ table2中数据如下: mysql> select * from table2; +----+------+--------------------+-------+------+ | id | type | key | value | desc | +----+------+--------------------+-------+------+ | 1 | 1 | 19353600611478353H | 91 | NULL | | 2 | 1 | 19353400733629439Y | 74 | NULL | | 3 | 1 | 1935310026017260XP | 58 | NULL | | 4 | 1 | 1935320066474298XL | 85 | NULL | +----+------+--------------------+-------+------+
2、分析及解决方法
本问题可以分解为两步,第一步是找出差异数据,使用not exsits刷选出差异数据;第二步将差异数据插入表中。 a、刷选出两表差异数据 mysql> SELECT `desc`,`value`,`type`,`key` FROM table1 WHERE NOT EXISTS ( SELECT `desc`,`value`,`type`,`key` FROM table2 WHERE table2.key = table1.key AND table2.value = table1.value AND table2.type = table1.type); +----+------+--------------------+-------+------+ | id | type | key | value | desc | +----+------+--------------------+-------+------+ | 5 | 1 | 19353500665066864F | 70 | NULL | | 6 | 1 | 19353200751605000A | 63 | NULL | | 7 | 1 | 19353600587527169N | 58 | NULL | | 8 | 1 | 19353200612261252T | 65 | NULL | | 9 | 1 | 193532005562039629 | 75 | NULL | | 10 | 1 | 19353200155011310C | 66 | NULL | +----+------+--------------------+-------+------+ b、刷选出两表差异数据并插入table3中 mysql> INSERT INTO table3(`desc`,`value`,`type`,`key`) SELECT `desc`,`value`,`type`,`key` FROM table1 WHERE NOT EXISTS ( SELECT `desc`,`value`,`type`,`key` FROM table2 WHERE table2.key = table1.key AND table2.value = table1.value AND table2.type = table1.type); c、查看table3中数据 mysql> select * from table3; +----+------+--------------------+-------+------+ | id | type | key | value | desc | +----+------+--------------------+-------+------+ | 1 | 1 | 19353500665066864F | 70 | NULL | | 2 | 1 | 19353200751605000A | 63 | NULL | | 3 | 1 | 19353600587527169N | 58 | NULL | | 4 | 1 | 19353200612261252T | 65 | NULL | | 5 | 1 | 193532005562039629 | 75 | NULL | | 6 | 1 | 19353200155011310C | 66 | NULL | +----+------+--------------------+-------+------+