![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
...одинаковых записей.. [D7, IB6.x]
_Narayan_ © (2003-06-17 14:50:00)В таблице есть несколько одинаковых записей.
Как удалить одну из них?
_Narayan_ (2003-06-17 23:25:00) [1]Спасибо, Romkin.
..остальные как обычно..
Johnmen (2003-06-17 17:44:00) [2]>Sandman25 © (17.06.03 16:59)
>ибо смысла сие не имеет.
Вот и я про то же...:)
Sandman25 (2003-06-17 16:59:00) [3]Johnmen © (17.06.03 16:31)
Я невнимательно прочел :( ибо смысла сие не имеет.
Тогда только через RDB$DB_KEY
Johnmen (2003-06-17 16:31:00) [4]>Sandman25 © & ALL
Ну, уважаемые ! В вопросе же четко сказано, что удалить одну, а не все дубликаты !!!
Sandman25 (2003-06-17 16:19:00) [5]>Есть и другие варианты
Другие варианты задействуют идентификаторы строки (RowId в Informix, в IB должен быть аналог).
Romkin (2003-06-17 16:14:00) [6]Короче:
http://www.ibase.ru/devinfo/deldupes.htm
Sandman25 (2003-06-17 16:12:00) [7]
CREATE TABLE copy_table
( name CHAR(10),
family CHAR(23));
INSERT INTO copy_table
SELECT DISTINCT *
FROM table1
WHERE name IN ("Sasha", "Vasya", "Petya");
DELETE FROM table1
WHERE name IN ("Sasha", "Vasya", "Petya");
INSERT INTO table1
SELECT *
FROM copy_table;
DROP TABLE copy_table;
Если у нас таких повторяющихся строк не пару наборов, а много, то
CREATE TABLE copy_table
( name CHAR(10),
family CHAR(23));
INSERT INTO copy_table
SELECT DISTINCT *
FROM table1;
DELETE FROM table1;
INSERT INTO table1
SELECT *
FROM copy_table;
DROP TABLE copy_table;
Если у нас таких повторяющихся строк не много, а очень много, то
CREATE TABLE copy_table
( cnt INT,
name CHAR(10),
family CHAR(23));
INSERT INTO copy_table
SELECT COUNT(*),*
FROM table1
GROUP BY 2,3
HAVING COUNT(*) > 1;
DELETE FROM table1
WHERE EXISTS
(SELECT *
FROM copy_table
WHERE table1.name = name
AND table1.family = family
);
INSERT INTO table1
SELECT *
FROM copy_table;
DROP TABLE copy_table;
stone (2003-06-17 15:19:00) [8]
> >Sandman25 © (17.06.03 15:05)
> >Скопируйте куда-нибудь с помощью Distinct (INSERT INTO
>
> >copy_table SELECT DISTINCT * FROM table1), потом удалите
> все
> >записи и скопируйте строку из copy_table обратно.
Есть и другие варианты. Приведенный вариант подходит для работы только с небольшими объемами данных.
Johnmen (2003-06-17 15:13:00) [9]>Sandman25 © (17.06.03 15:05)
>Скопируйте куда-нибудь с помощью Distinct (INSERT INTO
>copy_table SELECT DISTINCT * FROM table1), потом удалите все
>записи и скопируйте строку из copy_table обратно.
И что ?
Sandman25 (2003-06-17 15:05:00) [10]Скопируйте куда-нибудь с помощью Distinct (INSERT INTO copy_table SELECT DISTINCT * FROM table1), потом удалите все записи и скопируйте строку из copy_table обратно.
Но вообще-то, см.Anatoly Podgoretsky © (17.06.03 14:58),
база некорректно спроектирована, тем более на InterBase, который имеет мощные средства поддержки целостности данных.
Johnmen (2003-06-17 14:59:00) [11]А почему только одну ?
Anatoly Podgoretsky (2003-06-17 14:58:00) [12]Как можно работать без первичного ключа.