У меня есть две таблицы с одинаковой структурой, которые могут иметь дублированные записи. Я хочу определить, какие из таблиц 2 уже существуют в таблице 1, и удалить их из таблицы 2. Следующий SELECT возвращает дублированные записи, которые я хочу удалить. Ни одна из этих таблиц не имеет первичного ключа, поэтому мне нужно сделать несколько «ON» для идентификации уникальных записей.
SELECT V.*
FROM table2 AS V
INNER JOIN table1 AS N
ON V.column1 = N.column1 AND V.column2 = N.column2 AND V.column3= N.column3;
Затем я вставляю это как подзапрос для DELETE:
DELETE FROM table2
WHERE table2.column1 IN
(SELECT V.*
FROM table2 AS V
INNER JOIN table1 AS N
ON V.column1 = N.column1 AND V.column2 = N.column2 AND V.column3= N.column3);
При выполнении этого запроса я получаю следующую ошибку:
Вы написали запрос, который может возвращать более одного поля без использования зарезервированного слова EXISTS в предложении FROM основного запроса. Исправьте инструкцию SELECT подзапроса, чтобы запросить одно поле.
Я также пробовал этот способ, но он удаляет все записи из таблицы 2, а не только результат подзапрос:
DELETE FROM table2
WHERE EXISTS
(SELECT V.*
FROM table2 AS V
INNER JOIN table1 AS N
ON V.column1 = N.column1 AND V.column2 = N.column2 AND V.column3= N.column3);
Это первое решение, которое я придумал, но мне интересно, не будет ли проще сделать в MS Access вставку в таблицу1 всех записей из таблицы2, которые не сопоставьте, а затем удалите table2.
Будут оценены все предложения:)