Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > одинаковые ряды в таблице


Автор: AlexxO 18.7.2005, 19:12
Посоветуйте плиз как лучше удалить одинаковые (отличаются только по id) ряды в таблице.
перебирать их в цикле while ИМХО не оптимально, может каким SQL запросом можно прблему решить?

Автор: Irokez 18.7.2005, 19:22
по идее можно было бы так:
Код

delete from table where id not in (select distinct id from table);

но почему то не работает =(

Автор: Mal Hack 18.7.2005, 19:49
А не проще НЕ ДОПУСКАТЬ повтора?

Автор: Bikutoru 19.7.2005, 10:32
Одним запросом выбрать одинаковые записи можно так:
Код

SELECT 
 t1.id 
FROM
 table AS t1 
INNER JOIN
 table AS t2 ON (t1.some_value = t2.some_value AND t1.id != t2.id);

и если у тебя MySQL 4.0 и выше то так
Код

DELETE FROM table
WHERE
 id IN (SELECT t1.id FROM table AS t1 INNER JOIN table AS t2 ON (t1.some_value = t2.some_value AND t1.id != t2.id))

Если более старая, то скриптом формируешь запрос типа
Код

DELETE FROM table WHERE id IN (...)


Irokez, а твой запрос и не может работать.
Код
select distinct id from table
выберет все возможные id из таблицы
Код
id not in (select distinct id from table)
всегда ложно будет smile

Автор: Irokez 19.7.2005, 12:36
Цитата(Bikutoru @ 19.7.2005, 10:32)
Irokez, а твой запрос и не может работать.

почему? .. проблема вроде в синтаксисе, может мускул не поддерживает вложенные запросы?
Код

select distinct id from table

должен выбрать уникальные id, а все остальные удаляем.. по логике вроде все правильно

Автор: Bikutoru 19.7.2005, 15:28
DISTINCT просто выдает набор значений без повторов. Т.е. если в таблице table есть записи с значениями поля field 1, 2, 4, 5, 2, 5, то
Код
SELECT DISTINCT field FROM table
вернет (1, 2, 4, 5). Если не веришь - проверь smile

Автор: o.s.a. 19.7.2005, 19:15
Цитата
должен выбрать уникальные id, а все остальные удаляем..

так ведь id и так уникальные, другие поля одинаковые => по ним нужно проверять

Автор: Joes 19.7.2005, 19:38
http://www.isp.idknet.com/development/interbase/devinfo/deldupes.htm

Автор: Irokez 19.7.2005, 19:40
Bikutoru ок ступил.. признаю ошибку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)