我有2张具有相同结构的表。
current_db
= 521,892行,主键为email
new_db
= 575,992行,主键为email
在new_db
点我要删除已在email
中的现有current_db
地址。
问题:
我如何比较&删除email
上的现有new_db
,new_db
上的结果仅为54,100
答案 0 :(得分:1)
如果索引匹配,您可以一次性执行以下操作:
delete from new_table where id in (select id from old_table)
否则,您必须根据匹配字段修改查询
delete from new_table where id in (select id from old_table where oldtable.field = newtable.field)
当然你必须注意你实际删除的内容,我的建议是两次删除(创建一个临时表并将删除更改为插入到temp_table中)然后检查是否有效的每一行都是正确的。
(在Oracle下面有一个减号运算符,它显示了两个记录集之间的差异,希望在你的数据库环境中有类似的东西)。
减去op就像:
select * from table_a
minus
select * from table_b
从2个相同的表开始,它只提供具有不同字段值的行。
如果数据一切正常,如何用count(*)进行交叉检查是直截了当的。 不知道你的RDBMS是否存在类似的东西,但我认为谷歌上的快速搜索可能有所帮助。
答案 1 :(得分:1)
检查要删除的行 -
SELECT n.* FROM new_db n
JOIN current_db c
ON n.email = c.email;
删除它们 -
DELETE n
FROM new_db n
JOIN current_db c
ON n.email = c.email;
答案 2 :(得分:0)
DELETE n
FROM new_db n
WHERE EXISTS
( SELECT *
FROM current_db c
WHERE c.email = n.email
)