Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
kir_kul   (2003-05-26 12:49) [0]

Ув. Мастера, как с помощью SQL-запроса удалить двойные записи? База не была индексирована.
Зараннее спасибо.


 
Zacho   (2003-05-26 12:56) [1]


> kir_kul © (26.05.03 12:49)

СУБД какая ? Общего решения для любой СУБД - нет.


 
kir_kul   (2003-05-26 12:58) [2]

Oracle 9


 
stone   (2003-05-26 13:04) [3]

Если записи абсолютно идентичны:
1. Создать временное автоинкрементное поле
2. Удалить идентичные записи с различая по значению этого поля
3. Уничтожить поле


 
kir_kul   (2003-05-26 13:13) [4]

А что такое автоинкрементное поле, и как оно создается?


 
roottim   (2003-05-26 13:45) [5]

1. автоинкремента - такого нет... есть сиквенсы...
2. всегда есть псевдостолбец rowid
3. если дублирование только по всем полям - то ни проще ли
create table tmp as
select distinct * from nuna_table
,дроп ненужной таблицы
,и переименуй tmp


 
Reindeer Moss Eater   (2003-05-26 13:59) [6]

Не надо никакого временного автоинкрементного поля.
Есть уже там ROWID.


 
гончий   (2003-05-26 14:10) [7]

Попробуй такой запрос (должно в Oracle прокатить):
Синтаксис для InterBase:
----------------------------------
delete from tbl A
where( select count(*)from tbl B
where(A.name1=B.name1)and
......................
(A.nameX=B.nameX)) > 1


 
Danilka   (2003-05-26 16:10) [8]

было здесь в форуме красивое решение для орокла 8, попробую его вспомнить, подсказка - в запросе используется rowid.


 
Danilka   (2003-05-26 16:11) [9]

и еще был minus ;))


 
Danilka   (2003-05-26 16:19) [10]

кажется что-то типа:

delete from TABLENAME
where rowid in (
select rowid from TABLENAME
minus
select min(rowid) from TABLENAME group by FIELD1, FIELD2)

надеюсь, ничего не напутал.
запрос на миллионах записей выполнялся на порядки быстрее чем любые другие решения. (не на миллионах тоже будет быстро работать ;))


 
ins   (2003-05-26 16:20) [11]

Не знаю как для Оракла, не видал, но для юзающих MSSQL можно так:

select distinct * into Table2 from Table1;
drop table Table1
EXEC sp_rename "Table2", "Table1";


 
Johnmen   (2003-05-26 17:05) [12]

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


 
ДедушкаКо   (2003-05-26 17:20) [13]

group by



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.06.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.021 c
14-35053
Till
2003-05-23 08:21
2003.06.12
MainMenu как в Офисе ХР


14-35013
АлексейК
2003-05-26 05:46
2003.06.12
Набор данных из DLL.


1-34885
KMI
2003-05-31 20:22
2003.06.12
Как в run-time добавить к всплывающему меню подменю?


6-34955
daan_m
2003-04-11 06:32
2003.06.12
Мне требуется узнать на отправляющей стороне сколько уже отправл


14-35029
Juster~
2003-05-27 09:01
2003.06.12
Рассылка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский