比较两个MySQL表并删除不再存在的行

时间:2014-05-27 14:52:44

标签: mysql sql database

我创建了一个使用PHP / MySQL的系统,下载大型XML数据集,解析它,然后每周将解析后的数据插入MySQL数据库。

该系统由两个结构相同的数据库组成。一个是生产数据库,一个是临时数据库,其中数据被解析并插入到第一个数据库中。

当数据插入临时数据库时,我通过插入/替换生产数据库中的数据来执行合并。到目前为止,我已经完成了上述所有工作。然后我意识到,可能已在新数据集中删除的数据将留在生产数据库中。

我需要执行检查以查看新数据是否仍在生产数据库中,如果是,则保留它,如果它不是从生产数据库中删除行,那么这些行不会留给留连。

为了论证,我们假设这两个数据库被称为database_temporarydatabase_production

我该怎么做呢?

1 个答案:

答案 0 :(得分:4)

如果您使用SQL进行合并,一个简单的SQL也可以执行删除:

delete from database_production.table
where pk not in (select pk from database_temporary.table)

注意:

示例not exists

delete from database_production.table p
where not exists (select 1 from database_temporary.table t where t.pk = p.pk)

表现说明:
正如@mgonzalez在该问题的评论中指出的那样,您可能希望使用时间戳列(类似于上次修改的内容)进行比较/合并,以便仅比较更改的行。这不适用于具体的删除,你不能使用时间戳进行删除,因为这行不会存在。