powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Быстрая проверка уникальности
3 сообщений из 3, страница 1 из 1
Быстрая проверка уникальности
    #32057748
Фотография _ChaiNik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо проверить уникальность значения поля и дубликаты грохнуть. Вот такая конструкция
Код: plaintext
1.
 delete prep from prep pp
  	where (select count(*) from prep where prep.tkey=pp.tkey)> 1  
, при больших объемах данных тихо умирает... как бы это пошустрее сделать?
...
Рейтинг: 0 / 0
Быстрая проверка уникальности
    #32057755
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это Вам, наверное, крупно повезло, что запрос "загнулся".
Таким запросом Вы удаляете ВСЕ записи с дублироваными ключами. А вам наверное надо по одной-то оставить?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
set nocount on
create table prep
(tkey int, param float)
insert into prep values ( 1 ,rand())
insert into prep values ( 1 ,rand())
insert into prep values ( 2 ,rand())
insert into prep values ( 2 ,rand())
insert into prep values ( 2 ,rand())
insert into prep values ( 3 ,rand())
insert into prep values ( 4 ,rand())
go
select max(tkey) tkey, max(param) param  into #temp from prep pp
group by tkey 
having count(tkey)> 1 

delete prep from #temp where prep.tkey=#temp.tkey

insert into prep select * from #temp

select * from prep

go
drop table #temp
drop table prep


Если так не нравится, поищите по форуму. Такая задача уже обсуждалась.
...
Рейтинг: 0 / 0
Быстрая проверка уникальности
    #32057783
Фотография Гнездин Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если есть primary key (поле id), то можно и так:
Код: plaintext
delete prep from prep pp where (select count(*) from prep where prep.tkey=pp.tkey)> 1  and pp.id <> (select top  1  p2.id from prep p2 where p2.tkey=pp.tkey)

Если id нет - его можно добавить :)
А еще для примлемой производительности не обойтись без индекса по полю tkey, который по окончании операции можно удалить.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Быстрая проверка уникальности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]