Итак, если вам нужна предыстория, посмотрите мой предыдущий вопрос
Выяснить, какая из моих записей не является дубликатом, довольно просто:
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Это возвращает все мои не дубликаты. Поэтому я решил переместить их в другую таблицу с именем «no_duplicates», а затем удалить их из исходной таблицы. Затем я мог видеть дубликаты в исходной таблице, исправлять их и добавлять обратно no_dupes. Но пока:
INSERT INTO no_duplicates
SELECT *
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Работает как шарм, следующее выдает ошибку:
DELETE
FROM eventlog
GROUP BY event_date, user
HAVING COUNT(*) = 1
ORDER BY event_date, user
Я предполагаю, что, хотя запрос возвращает уникальные записи, уже находящиеся в таблице, удаление с помощью агрегатной функции не является кошерным. Что понятно, за исключением того, что я не знаю, что еще я могу сделать, чтобы обеспечить удаление только тех записей, которые я переместил. Я искал и не нашел синтаксиса «После того, как INSERT уничтожит записи в исходной таблице», и я предполагаю, что он все равно потерпит неудачу по той же причине, по которой не удалось удалить.
Итак, может ли кто-нибудь помочь мне найти недостающую часть?