Ваша проблема в том, что вам нужно другое условие 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 *.