使用PHP,比较两个单列MYSQL表,从表A中添加表B中不存在的记录,并删除存在的记录


With PHP, compare two single-col MYSQL tables, adding records from table A that do not exist in table B, and deleting records that do

我在一个DB中有两个表,a和B。每个表只包含一列,即电子邮件。所以我想对照表A检查表B中的每封电子邮件,如果它存在,就删除它;如果它不存在,请添加它。

我该怎么做?

理想情况下,您应该在纯SQL中真正做到这一点,而不必使用php。

假设表A有列a integer,表B有列b integer。然后你可以做这样的事情:

create temporary table X as select a from A join B on A.a=B.b;
delete from B where b in (select a from X);
delete from A where a in (select a from X);
insert into A (a) (select b from B);

这会执行以下操作:

  1. 创建一个临时表,并将a和B中存在的所有记录插入其中
  2. 从B中删除两个表中存在的所有记录
  3. 从A中删除两个表中存在的所有记录
  4. 在A中插入B中剩余的所有内容

由于表X是临时创建的,因此当数据库连接关闭时,它将自动删除。

现在,如果您需要从PHP调用它,您可以执行以下操作:

$db = new PDO($CONNECT_STRING, USERNAME, PASSWORD);
$db->exec("create temporary table X as select a from A join B on A.a=B.b");
$db->exec("delete from B where b in (select a from X)");
$db->exec("delete from A where a in (select a from X)");
$db->exec("insert into A (select b from B)");
$db = null;

编辑:

如果您所需要的只是A中不存在的来自B的记录,那么您可以做一个简单的SQL,如下所示:

select b from B where b not in (select a from A)
相关文章: