如何合并和删除新数据库上的现有主键?

时间:2011-09-05 07:02:01

标签: mysql

我有2张具有相同结构的表。

current_db = 521,892行,主键为email

new_db = 575,992行,主键为email

new_db点我要删除已在email中的现有current_db地址。

问题:

我如何比较&删除email上的现有new_dbnew_db上的结果仅为54,100

3 个答案:

答案 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
  )