Mysql 如何合并和删除新数据库上的现有主键?
我有两张结构相同的桌子 当前_db=521892行,主键为email new_db=575992行,主键为email 在新数据库上,我想删除当前数据库中已有的电子邮件地址 问题:Mysql 如何合并和删除新数据库上的现有主键?,mysql,Mysql,我有两张结构相同的桌子 当前_db=521892行,主键为email new_db=575992行,主键为email 在新数据库上,我想删除当前数据库中已有的电子邮件地址 问题: 如何比较和删除新数据库上的现有电子邮件,而新数据库上的结果仅为54100如果索引匹配,您可以使用以下方法一次性完成: delete from new_table where id in (select id from old_table) 否则,您必须根据匹配字段修改查询 delete from new_table
如何比较和删除新数据库上的现有电子邮件,而新数据库上的结果仅为54100如果索引匹配,您可以使用以下方法一次性完成:
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)
当然,您必须注意实际删除的内容,我的建议是分两步删除,创建一个临时表,并将删除更改为插入临时表,然后检查所有内容是否正确
在Oracle下,有一个减号操作符,它显示了两个记录集之间的差异,希望您的数据库环境中有类似的东西
负op的工作原理如下:
select * from table_a
minus
select * from table_b
从两个相同的表开始,它只提供具有不同字段值的行
如果数据一切正常,如何交叉检查count*是很简单的。
不知道您的RDBMS是否存在类似的内容,但我认为在google上进行快速搜索可能会有所帮助。检查要删除的行-
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;
在MySQL中,SELECTY FROM z中的x没有得到很好的优化。在这种情况下,最好使用JOIN或EXISTS解决方案。对不起,我不知道MySQL的这个限制。通常,当我可以实现固定的执行时间查询时,我会尽量避免连接。但我想这取决于数量和应用范围。不过,谢谢你提供的信息。干杯。在您的第二个查询中,在select*。。。应该是选择id中的id所在的位置。。。或者id=selectid…这并不是查询将运行的限制,但是当表很大时,执行计划将不是最好的。
DELETE n
FROM new_db n
WHERE EXISTS
( SELECT *
FROM current_db c
WHERE c.email = n.email
)