比较两个mysql表中的唯一值

时间:2009-12-17 05:24:38

标签: sql mysql unique

我有两个mysql表:TableA有10,000条记录,TableB有2,000条记录。

我想将TableA中的8,000条唯一记录复制到TableB中,忽略已经复制的TableB中的2,000条。

3 个答案:

答案 0 :(得分:5)

如果唯一性由PRIMARY KEY约束或UNIQUE约束决定,那么您可以使用INSERT IGNORE

INSERT IGNORE INTO TableB SELECT * FROM TableA;

将以静默方式跳过与TableB中已有的行冲突的重复行,并插入其他8,000行。

有关详细信息,请参阅INSERT上的文档。

如果您需要在PHP中执行此操作,请阅读array_diff_key()函数。使用主键值存储数组作为数组元素的键。但是,不能保证在这样的大型数组上使用这个PHP函数的性能!

答案 1 :(得分:1)

使用INSERT INTO语法:

INSERT INTO TABLE_B 
  SELECT *
    FROM TABLE_A a
   WHERE NOT EXISTS(SELECT NULL
                      FROM TABLE_B b
                     WHERE b.column = a.column)

您需要更新WHERE b.column = a.column)才能满足,但是您确定TABLE_B中已存在记录。

答案 2 :(得分:0)

这样的事情:

insert into TableB
select *
from Table A
where not exists (
    select 1
    from TableB
    where TableB.id = TableA.id
)

或者,如果表B中的条目因其主键而“不唯一”,我认为insert ignore可能会成功。