您的问题是您需要子查询中的另一个 where 子句来标识重复的内容:
INSERT INTO destTable
SELECT Field1,Field2,Field3,...
FROM srcTable
WHERE NOT EXISTS(SELECT *
FROM destTable
WHERE (srcTable.Field1=destTable.Field1 and
SrcTable.Field2=DestTable.Field2...etc.)
)
正如另一位回答者所指出的,外连接可能是一种更简洁的方法。我上面的示例只是尝试使用您当前的查询进行解释,以便更容易理解。这两种方法在技术上都可行。
INSERT INTO destTable
SELECT s.field1,s.field2,s.field3,...
FROM srcTable s
LEFT JOIN destTable d ON (d.Key1 = s.Key1 AND d.Key2 = s.Key2 AND...)
WHERE d.Key1 IS NULL
上述两种方法都假设您担心从源插入可能已经在目标中的行。如果您担心源有重复行的可能性,您应该尝试类似的操作。
INSERT INTO destTable
SELECT Distinct field1,field2,field3,...
FROM srcTable
还有一件事。我还建议在插入语句中列出特定字段,而不是使用 SELECT *。