Я бы посоветовал проверить переписанный запрос, как показано ниже ... Выполните прямое соединение одного с другим по критериям, которые "квалифицируют" то, что считается совпадением ... Затем в предложении WHERE выведите его, если это не подходит к совпадению
select
p1.Prename,
p1.Surname
from
person p1
join person p2
on p1.ID <> p2.ID
and ( p1.Surname = p2.Surname
or p1.SurName = p2.AltName )
and p2.PreName like concat( concat( '%', p1.Prename ), '%' )
where
p1.PreName is not null
and p1.SurName is not null
and p1.Inv_date is null
and p2.id is null
Согласно вашим комментариям, но из того, что вы искали ... НЕТ, НЕ выполняйте внешнее левое соединение ... Если вы ищете имена, которые похожи на те, которые вы хотите удалить (как бы вы Я справлюсь с этим), вы хотите ПРЕКВАЛИФИЦИРОВАТЬ те записи, которые ДЕЛАЮТ МАТЧ через самосоединение (следовательно, обычное соединение). Если у вас есть имя, которое НЕ имеет похожего имени, вы, вероятно, захотите оставить его в покое ... таким образом, оно автоматически останется ВНЕ из набора результатов.
Теперь, предложение WHERE вступает в силу ... У вас есть действующий человек слева ... У него есть человек справа ... Это ДУБЛИКАТЫ ... так что у вас есть совпадение, теперь, добавив логический p2.ID IS NULL создает тот же результат, что и NOT EXIST, давая окончательные результаты.
Я вернул свой запрос к обычному соединению.