Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何合并和删除新数据库上的现有主键?_Mysql - Fatal编程技术网

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

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

我有两张结构相同的桌子

当前_db=521892行,主键为email

new_db=575992行,主键为email

在新数据库上,我想删除当前数据库中已有的电子邮件地址

问题:


如何比较和删除新数据库上的现有电子邮件,而新数据库上的结果仅为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
  )