两个表取差集再插入到另一张表中
@
概要
工作中采集时候遇到一个问题,就是两张结构一样的表数据不同,哪里不同呢,如t1表是基础表,里面数据量大,但是它不全,t2表有少数t1的数据也有一些自己额外的数据,我的需求是把t2里面t1没有的数据插入到t1中
思路梳理
这种也简单就是在t2中取t1和t2的差集,然后取出这些id再insert到t1中即可。
我的两个表都有一个共通的other_id,这个字段数据是唯一的,可以从other_id下手
实现步骤
- 取出他们两个的差集,从t2中
SELECT
t1.*
FROM
a_film t1
LEFT JOIN
a_film_copy3 t2
ON
t1.other_id = t2.other_id
WHERE
t2.other_id IS NULL;
-
直接复制结果中所有的id,然后粘贴到sublime中,然后替换以逗号隔开
-
取出这些id然后对应插入到t1
INSERT INTO a_film_copy3 (title, cover, url, rating, casts, star, directors, cover_x, cover_y, other_id)
SELECT title, cover, url, rating, casts, star, directors, cover_x, cover_y, other_id from a_film where id in(...)
小结
这个方法目前只适用于数量级较少的场景中,我的是1w左右,查询速度2-3秒,如果1百万、1千万级估计吃不消,那时候可能用脚本跑更合适些,暂记录这么多。