Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Удаление повторяющихся записей в таблице


kol ©   (2003-04-23 16:07:00) 

В таблице есть 2 поля комбинация которых должна быть уникальной. Нужно стереть записи в которых эта комбинация повторяется. но про этом из повторяющихся записей одна должна остаться в базе.


Reindeer Moss Eater   (2003-04-24 10:09:00) [1]

Заблуждение


NAlexey   (2003-04-24 10:08:00) [2]

>А кто здесь упомянул о второй таблице?
Да собственно, а кто?


Жук   (2003-04-24 09:15:00) [3]


> Карелин Артем © (23.04.03 17:02)
> И сколько же записей останется после удаления? По-моему
> 0. И таблица вроде как одна.

Таблица одна. Записей, удовлетворяющих условию, останется одна.


Reindeer Moss Eater   (2003-04-24 09:08:00) [4]

А кто здесь упомянул о второй таблице?


Карелин Артем   (2003-04-23 17:52:00) [5]

Народ, а ведь автор не упомянало второй таблице.


NDeu   (2003-04-23 17:45:00) [6]

http://www.ibase.ru/devinfo/deldupes.htm


kravchuk   (2003-04-23 17:34:00) [7]

думаю можно так

delete from our_table t1
where exists
(
select t2.id
from our_table t2
where t1.field1=t2.field1
and t1.field2=t2.field2
and t1.id<>t2.id
)

id - это первичный ключ


NAlexey   (2003-04-23 17:15:00) [8]

А вот примерчик и с удалением:

SELECT
FIELD1,
FIELD2
FIELD3

INTO
#tmp
FROM
TABLE_NAME

GROUP BY
FIELD1,
FIELD2,
FIELD3
HAVING count(*) > 1

delete
TABLE_NAME
FROM
TABLE_NAME tt
WHERE exists (
SELECT
*
FROM
#tmp t
WHERE
tt.FIELD1 = t.FIELD1 and
tt.FIELD2 = t.FIELD2 and
tt.FIELD3 = t.FIELD3
)

INSERT INTO TABLE_NAME SELECT * FROM #tmp
drop table #tmp


Карелин Артем   (2003-04-23 17:10:00) [9]

VAleksey © (23.04.03 17:07)
Или результат этого перебросить в другую таблицу и ей заменить старую.


NAlexey   (2003-04-23 17:09:00) [10]

А так будет работать?

SELECT
FIELD1,
FIELD2,
FIELD3
FROM
TABLE_NAME

GROUP BY
FIELD1,
FIELD2,
FIELD3
HAVING count(*) > 1


VAleksey   (2003-04-23 17:07:00) [11]

SELECT DISTINCT
А все остальное на фиг любым способом :-)


Карелин Артем   (2003-04-23 17:02:00) [12]

Жук © (23.04.03 16:52)
И сколько же записей останется после удаления? По-моему 0. И таблица вроде как одна.


Johnmen   (2003-04-23 17:01:00) [13]

Не надо спорить...:)
Пока автор не указал БД.


Reindeer Moss Eater   (2003-04-23 16:58:00) [14]

Автор говорит про два поля.
Оба поля - не первичные ключи и их комбинация тоже не PK.
Тольуо этими полями нельзя однозначно определить записи для удаления


Жук   (2003-04-23 16:52:00) [15]

А конкретнее ?


Reindeer Moss Eater   (2003-04-23 16:52:00) [16]

Ага


Жук   (2003-04-23 16:51:00) [17]


> Reindeer Moss Eater (23.04.03 16:49)
> Неправильно

Это вы мне ? :-)


Reindeer Moss Eater   (2003-04-23 16:49:00) [18]

Неправильно


Жук   (2003-04-23 16:42:00) [19]

delete from tabl t1
where (select count(t2.id1) from tabl t2 where t2.id1=t1.id1 and t2.id2=t1.id2)>1


Reindeer Moss Eater   (2003-04-23 16:12:00) [20]

Класс TDataSet, метод Delete


Наверх

Титульная страница Поиск, карта сайта Написать письмо