Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

...одинаковых записей..   Найти похожие ветки 

 
_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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-31186
Adil Aliev
2003-06-28 00:57
2003.07.10
MDIChild


14-31416
CrazyHackers
2003-06-25 19:03
2003.07.10
Ускорить DbGrid


3-31070
abc
2003-06-15 20:45
2003.07.10
как через TADOQuery привезать две базы? как мастер и подчинённая


3-31072
bSava
2003-06-11 15:39
2003.07.10
Как после Refresh попасть на ту запись которая была активна.


9-31066
Mihey
2003-01-25 22:20
2003.07.10
Здания в изометрии.