Если ваша таблица имеет уникальный первичный ключ (... будет зависеть от дизайна ...), то это жизнеспособная альтернатива необходимости подсчета вхождений записей:
DELETE FROM people as A
WHERE deleted = 1
AND EXISTS (SELECT '1'
FROM people as B
WHERE B.id <> A.id
AND A.firstName = B.firstName
AND A.lastName = B.lastName)
Это может иметь чуть лучшую производительность, чем подсчет строк. Обратите внимание, что этот запрос, скорее всего, столкнется с той же возможной проблемой, что и в предыдущем ответе; в частности, если есть две или более «удаленных» строк, а «не удаленных» нет, обе они, вероятно, будут удалены (оставив вас без строк!). Если целью запроса является удаление только «удаленных» строк при наличии «не удаленной» эквивалентной строки, добавьте AND B.deleted = 0
как часть внутреннего предложения WHERE
.