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

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

Удалить одинаковые записи в FireBird [D7, FireBid 2 rc5]


snake767 ©   (2006-10-06 12:54:00) 

Есть таблица в которой нужно удалить одинковые записи, т.е. отсавить одну, вместо2х, 3х итд. Если делать sql запрос:
'delete from LANDISHIST where ID=1 and GROUPID=1 and ARDTIMESTAMP = '20.07.2006 14:00:00', то удалит все записи с такими полями, а нужно оставить одну.
И почему неполучается пользоваться таким макаром:
IBQuery1.edit
IBQuery1.Fields[0].asString := 'test';
IBQuery1.Post;
выдает ошибку


Johnmen   (2006-10-06 17:08:00) [1]

DELETE FROM Table T1 WHERE 1<(SELECT COUNT(*) FROM Table T2 WHERE T1.Field1=T2.Field2 AND ...)


Автора таких таблиц отлучить от всего навсегда. В дворники...


MsGuns   (2006-10-06 16:26:00) [2]

Блин, переведу..

Не все СУБДимеют средства уникально индентифицировать записи в таблицах, поэтому тех разработчиков, которые при работе с такими СУБДНЕ ПРЕДУСМОТРЕЛИ блокировку ввода записей-дублей, вешать не надо.
Если же СУБДимеет такие средства (как жарптичка, например), а горе-разработчик все же напроектировал в своей БДтак, что в таблице появляются записи-"двойники", то такого "умельца" надо в дворники или "на гилляку".


Sergey13   (2006-10-06 14:38:00) [3]

> [5] MsGuns ©   (06.10.06 14:34)
> ?

Все СУБДдопускают такое, просто не все разработчики этим пользуются. 8-)


MsGuns   (2006-10-06 14:34:00) [4]

>atruhin ©   (06.10.06 13:05) [4]

Если такие ДОПУСКАЮТСЯ в файрберде, то разработчика такой
"БД"- на гілл`яку

Так что на гілл`яку не разработчика файрберда а автора.

?


atruhin   (2006-10-06 13:05:00) [5]

> Если такие ДОПУСКАЮТСЯ в файрберде, то разработчика такой
> "БД" - на гілл`яку

Такое допускается, если не создавать первичный ключ и другие ограничения.
Так что на гілл`яку не разработчика файрберда а автора.
По сабжу:

SELECT * FROM TABLE T1
WHERE EXISTS (SELECT FIELD FROM TABLE T2
             WHERE T1.FIELD = T2.FIELD AND
             T1.RDB$DB_KEY != T2.RDB$DB_KEY)


Desdechado   (2006-10-06 13:04:00) [6]

на ibase.ru была статья по этому поводу (суть - использование внутреннего системного идентификатора записи)


Sergey13   (2006-10-06 13:04:00) [7]

> [0] snake767   (06.10.06 12:54)

> а нужно оставить одну.
Самое простое и универсальное
insert into double_table select distinct * from source_table;
delete from source_table;
insert into source_table select * from double_table;
Только не забыть тригера и констрейнты поотключать.

> И почему неполучается пользоваться таким макаром:
Потому что еще не выполнил пункт 1


MsGuns   (2006-10-06 12:58:00) [8]

Что есть id ? Если это поле определяется генератором и является первичным ключом, то все, что в сабже - криминал. От первой строки до последней.

Что есть "одинаковые записи" ? Если такие ДОПУСКАЮТСЯ в файрберде, то разработчика такой "БД" - на гілл`яку


Наверх

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