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

时间:2014-04-21 18:46:09

标签: php mysql

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

理想情况下,你应该在纯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. 插入剩余的B
  5. 中的所有内容

    当表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;
    

    修改

    如果你需要的只是B中A中不存在的记录,那么你可以这样做一个简单的SQL:

    select b from B where b not in (select a from A)