使用PHP,比较两个单列MYSQL表,从表A中添加表B中不存在的记录,并删除不存在的记录
我在数据库中有两个表,a和B。每个表只包含一列,电子邮件。因此,我想对照表A检查表B中的每封电子邮件,如果存在,则将其删除;如果它不存在,请添加它使用PHP,比较两个单列MYSQL表,从表A中添加表B中不存在的记录,并删除不存在的记录,php,mysql,Php,Mysql,我在数据库中有两个表,a和B。每个表只包含一列,电子邮件。因此,我想对照表A检查表B中的每封电子邮件,如果存在,则将其删除;如果它不存在,请添加它 如何做到这一点?理想情况下,您应该在纯SQL中做到这一点,而不必使用php 假设表A有一列A整数,表B有一列B整数。然后你可以这样做: 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); d
如何做到这一点?理想情况下,您应该在纯SQL中做到这一点,而不必使用php 假设表A有一列
A整数
,表B有一列B整数
。然后你可以这样做:
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);
select b from B where b not in (select a from A)
这样做的目的如下:
$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;
$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:
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);
select b from B where b not in (select a from A)
如果两个表都匹配,您希望将记录从两个表中删除,还是只从一个表中删除?两者都要。一种更简单/更有效的方法是在一次运行中删除重复项(两者),然后将表B中剩余的电子邮件地址插入表A。。。那我该怎么做呢?你想删除重复的,然后制作重复的?什么?不。。。我想删除两个表中的重复项,然后将表B中剩余的非重复项插入表A中,或者只是将两个无重复项的表(从两个表中)连接起来。