Удаление дублей SQL

D
На сайте с 28.06.2008
Offline
1114
289

Пытаюсь подчистить базу ФИО от дублей, составил такой запрос

CREATE TABLE `t_temp` as (
SELECT * FROM `xyq_items`
WHERE (
fullname, section_id
)
IN (
SELECT fullname, section_id
FROM `xyq_items`
GROUP BY fullname, section_id
HAVING COUNT( fullname ) > 1
)
and CHAR_LENGTH(photo) < 5
);

чтобы если все ок выполнить

DELETE FROM xyq_items
WHERE id IN (SELECT `id` FROM t_temp);

Но в таблицу t_temp попали только те из пары дублей у которых поле photo вообще пустое (у обоих), а та пара где у одного фото есть, а у другого нет были проигнорированы запросом.

А мне то как раз нужно засунуть в таблицу t_temp тех из пар, у которых фото нет, а у дубля есть.

Где ошибаюсь?

---------- Добавлено 22.01.2019 в 15:19 ----------

Почти победил. проставил для пустых photo - is null, далее такой запрос

SELECT * FROM xyq_items y
INNER JOIN (SELECT fullname, section_id,photo,id
FROM `xyq_items`
GROUP BY fullname, section_id
HAVING COUNT( fullname ) > 1
) dt ON y.fullname=dt.fullname and y.photo is null and y.id < dt.id

Тут работает все как задумано кроме последнего y.id < dt.id

Запрос выдает всего 2 записи - показывает два дубле без фото.

Как так? Я же ему говорю покажи тех их дублей - у которых нет фото и наименьший ID

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий