CREATE TEMPORARY TABLE to_delete AS
SELECT setid FROM imagesets GROUP BY setid HAVING COUNT(*) = 1;
DELETE imagesets FROM imagesets NATURAL JOIN to_delete;
DROP TABLE to_delete;
Последняя строка не является обязательной. Временные таблицы автоматически удаляются к концу сеанса.
Aparently это тоже работает:
DELETE imagesets FROM imagesets NATURAL JOIN (SELECT setid FROM imagesets GROUP BY setid HAVING COUNT(*) = 1) singles;
Несмотря на это, используя SELECT
внутри DELETE
заявления, как MySQL обрабатывает этот запрос, кажется, не создавать конфликты с блокировкой таблицы. Согласно списку процессов, MySQL автоматически создает временную таблицу при этом. Я не могу сказать howover, что он будет работать для каждой версии MySQL.
Вы можете оптимизировать подзапрос, добавив 'LIMIT 2', так как вы больше не интересуетесь результатами. Действие удаления объясняется ниже. –