我有两个mysql表:TableA有10,000条记录,TableB有2,000条记录。
我想将TableA中的8,000条唯一记录复制到TableB中,忽略已经复制的TableB中的2,000条。
答案 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
可能会成功。