您可以使用LEFT JOIN 并根据您的 3 列仅插入表 1 中不存在的记录:
INSERT INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)
SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD
FROM Table2 t2
LEFT JOIN Table1 t1
ON t1.ColumnA = t2.ColumnA
AND t1.ColumnB = t2.ColumnB
AND t1.ColumnC = t2.ColumnC
WHERE t1.ColumnA IS NULL;
SqlFiddleDemo
我假设ColumnA-C 是复合PRIMARY KEY。
编辑:
你可以使用MySQLINSERT IGNORE:
INSERT IGNORE INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)
SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD
FROM Table2 t2;
SqlFiddleDemo2
如果您需要使用更新的值更新其余列,您可以使用:
INSERT INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)
SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD
FROM Table2 t2
ON DUPLICATE KEY UPDATE ColumnD = VALUES(ColumnD);
SqlFiddleDemo3
还有REPLACE INTO(比较慢,会删除旧记录+插入新记录):
REPLACE INTO Table1 (ColumnA, ColumnB, ColumnC,ColumnD)
SELECT t2.ColumnA, t2.ColumnB, t2.ColumnC, t2.ColumnD
FROM Table2 t2
SqlFiddleDemo4