Всем привет! Есть такой запрос: Код (Text): DELETE tn FROM tests tn JOIN (SELECT MAX(ID) AS ID FROM tests GROUP BY url HAVING COUNT(*) > 1) tn2 USING(ID) Он работает и он удаляет дублированные поля 'url' из таблицы 'tests' Проблема в том, что мне надо удалять дублированные поля только с конкретными 'id' , и это никак не получается. Помогите разобраться... Спасибо!
Да, я так тоже делал, но в один запрос удаляется только одна запись а мне надо в один запрос удалить все дубликаты, есть еще такой вариант Код (Text): DELETE t1 FROM tests AS t1, tests AS t2 WHERE t1.url = t2.url AND t1.title = t2.title AND t1.id > t2.id AND t1.keyword_id=? он хорошо работает с небольшими таблицами а у меня 500000+ и сервак просто повесился
ты что-то путаешся в показаниях. то тебе конкретный id, то все. ты сначала подумай, а потом задай вопрос.
Извините за неточность! Структура базы: Код (Text): id key_id url ----------------------------- 1 5 mail.pu 2 5 mail.pu 3 5 mail.pu 4 5 mail.pu 5 6 gmail.kom 6 7 yandex.pu 7 7 yandex.pu ...... ----------------- Мне надо удалить только те повторяющиеся поля в которых 'key_id=5'
массовое удаление дубликатов - моя версия. остаются записи с минимальным id Код (Text): DELETE t1 FROM tests AS t1 JOIN ( SELECT key_id, MIN(id) AS id FROM tests GROUP BY key_id HAVING COUNT(*) > 1 ) AS t2 ON (t1.key_id = t2.key_id) AND (t1.id <> t2.id) то же, но с указанием конкретного key_id. меняем GROUP BY на WHERE во внутреннем запросе Код (Text): DELETE t1 FROM tests AS t1 JOIN ( SELECT key_id, MIN(id) AS id FROM tests WHERE key_id = ? HAVING COUNT(*) > 1 ) AS t2 ON (t1.key_id = t2.key_id) AND (t1.id <> t2.id) должно работать быстро на больших объемах. надеюсь у тебя есть индекс по key_id?!