powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Двоиники
12 сообщений из 12, страница 1 из 1
Двоиники
    #32053181
Alexsandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Помогите с запросом.
Есть таблица t1 с полями а,b,c.
В ней существуют двойные записи.
Как удалить дубликаты?
...
Рейтинг: 0 / 0
Двоиники
    #32053183
Фотография Lexis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select distinct.....
...
Рейтинг: 0 / 0
Двоиники
    #32053186
Bzzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если t1 не очень большая, то

select distinct a, b, c into #T
from t1

delete from t1

insert into t1
select * from #T

иначе через COUNT и GROUP BY в #T
...
Рейтинг: 0 / 0
Двоиники
    #32053193
Alexsandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно физически удалить из таблицы двойников.
...
Рейтинг: 0 / 0
Двоиники
    #32053195
Alexsandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!!
...
Рейтинг: 0 / 0
Двоиники
    #32053197
sergwsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень хорошо это делать на клиенте:-)). Особенно, когда записей несколько миллионов.
...
Рейтинг: 0 / 0
Двоиники
    #32053201
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по описанию таблицы, она не имеет первичного ключа. Вот скрипт как избавится от двойников в этом случае
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
if exists (select * 
		from sysobjects 
		where name = 't1' and
			type = 'U')
begin
	drop table t1
end
 /* создание таблицы для примера */ 
create table t1
(
	a char( 1 ),
	b char( 1 ),
	c char( 1 )
)
 /* введем тестовые значения */ 
insert into t1 (a, b, c)
values ('a', 'a', 'a')
insert into t1 (a, b, c)
values ('a', 'a', 'a')
insert into t1 (a, b, c)
values ('b', 'b', 'b')
insert into t1 (a, b, c)
values ('c', 'c', 'c')
insert into t1 (a, b, c)
values ('d', 'd', 'd')
insert into t1 (a, b, c)
values ('d', 'd', 'd')
insert into t1 (a, b, c)
values ('e', 'e', 'e')
insert into t1 (a, b, c)
values ('f', 'f', 'f')
insert into t1 (a, b, c)
values ('f', 'f', 'f')

if exists (select * 
		from sysobjects 
		where name = 't1' and
			type = 'U')
begin
	drop table #t0
end
 /* создаем временную таблицу с уникальным полем */ 
create table #t0
(
	id_t0 int identity not null,
	a char( 1 ),
	b char( 1 ),
	c char( 1 ),
	constraint pk_#t0 primary key (id_t0)
)
 /* заносим данные во временную таблицу */ 
insert into #t0 (a, b, c)
select a, b, c
from t1
 /* удаляем двойников */ 
delete from #t0
where id_t0 in (select t1.id_t0
		from #t0 as t1 inner join #t0 as t2 on
			(t1.a = t2.a and
				t1.b = t2.b and
				t1.c = t2.c and
				t1.id_t0 > t2.id_t0))
 /* очищаем таблицу */ 
truncate table t1
 /* заносим правильные значения из временной таблицы */ 
insert into t1 (a, b, c)
select a, b, c
from #t0
 /* смотрим */ 
select * from t1

Если же у Вас первичный ключ есть то соответственно из примера Вам нужно только удаление
...
Рейтинг: 0 / 0
Двоиники
    #32053213
lvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lvv
Гость
Могу посоветовать добавить поле ID типа IDENTITY
Тогда записи уже будут не уникальнуми и их можно будет различать

delete t1
from t1 t1, t1 t2
where t1.a = t2.a and
t1.b = t2.b and
t1.c = t2.c and
t1.id>t2.id
...
Рейтинг: 0 / 0
Двоиники
    #32053215
Bzzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем не катит

select a,b,c into #td
from t
group by a,b,c
having count(1) > 1

delete from t
from #td
where #t.a = #td.a
and #t.b = #td.b
and #t.c = #td.c

insert into t
select * from #td
?
...
Рейтинг: 0 / 0
Двоиники
    #32053226
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Bzzzzz И так какит и этак, а если еще подумать, то можно как нибудь по другому придумать :)
...
Рейтинг: 0 / 0
Двоиники
    #32053284
AlexP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2fima
> Если же у Вас первичный ключ есть то соответственно из примера Вам нужно только удаление

Как могут дублироваться записи в таблице с первичным ключом?
...
Рейтинг: 0 / 0
Двоиники
    #32053293
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AlexP Пример: (1, "а", "а", "а") и (2, "а", "а", "а") значения записи продублированы. С чем сталкивался, о том и говорю.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Двоиники
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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