Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Вниз...одинаковых записей.. Найти похожие ветки
← →
_Narayan_ (2003-06-17 14:50) [0]В таблице есть несколько одинаковых записей.
Как удалить одну из них?
← →
Anatoly Podgoretsky (2003-06-17 14:58) [1]Как можно работать без первичного ключа.
← →
Johnmen (2003-06-17 14:59) [2]А почему только одну ?
← →
Sandman25 (2003-06-17 15:05) [3]Скопируйте куда-нибудь с помощью Distinct (INSERT INTO copy_table SELECT DISTINCT * FROM table1), потом удалите все записи и скопируйте строку из copy_table обратно.
Но вообще-то, см.Anatoly Podgoretsky © (17.06.03 14:58),
база некорректно спроектирована, тем более на InterBase, который имеет мощные средства поддержки целостности данных.
← →
Johnmen (2003-06-17 15:13) [4]>Sandman25 © (17.06.03 15:05)
>Скопируйте куда-нибудь с помощью Distinct (INSERT INTO
>copy_table SELECT DISTINCT * FROM table1), потом удалите все
>записи и скопируйте строку из copy_table обратно.
И что ?
← →
stone (2003-06-17 15:19) [5]
> >Sandman25 © (17.06.03 15:05)
> >Скопируйте куда-нибудь с помощью Distinct (INSERT INTO
>
> >copy_table SELECT DISTINCT * FROM table1), потом удалите
> все
> >записи и скопируйте строку из copy_table обратно.
Есть и другие варианты. Приведенный вариант подходит для работы только с небольшими объемами данных.
← →
Sandman25 (2003-06-17 16:12) [6]
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;
← →
Romkin (2003-06-17 16:14) [7]Короче:
http://www.ibase.ru/devinfo/deldupes.htm
← →
Sandman25 (2003-06-17 16:19) [8]>Есть и другие варианты
Другие варианты задействуют идентификаторы строки (RowId в Informix, в IB должен быть аналог).
← →
Johnmen (2003-06-17 16:31) [9]>Sandman25 © & ALL
Ну, уважаемые ! В вопросе же четко сказано, что удалить одну, а не все дубликаты !!!
← →
Sandman25 (2003-06-17 16:59) [10]Johnmen © (17.06.03 16:31)
Я невнимательно прочел :( ибо смысла сие не имеет.
Тогда только через RDB$DB_KEY
← →
Johnmen (2003-06-17 17:44) [11]>Sandman25 © (17.06.03 16:59)
>ибо смысла сие не имеет.
Вот и я про то же...:)
← →
_Narayan_ (2003-06-17 23:25) [12]Спасибо, Romkin.
..остальные как обычно..
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c