![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить одинаковые записи в 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 ? Если это поле определяется генератором и является первичным ключом, то все, что в сабже - криминал. От первой строки до последней.
Что есть "одинаковые записи" ? Если такие ДОПУСКАЮТСЯ в файрберде, то разработчика такой "БД" - на гілл`яку