Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Двоиники / 12 сообщений из 12, страница 1 из 1
26.09.2002, 10:49:36
    #32053181
Alexsandr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
Всем привет!
Помогите с запросом.
Есть таблица t1 с полями а,b,c.
В ней существуют двойные записи.
Как удалить дубликаты?
...
Рейтинг: 0 / 0
26.09.2002, 10:55:27
    #32053183
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
select distinct.....
...
Рейтинг: 0 / 0
26.09.2002, 11:01:29
    #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
26.09.2002, 11:07:47
    #32053193
Alexsandr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
Мне нужно физически удалить из таблицы двойников.
...
Рейтинг: 0 / 0
26.09.2002, 11:09:10
    #32053195
Alexsandr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
Спасибо!!!
...
Рейтинг: 0 / 0
26.09.2002, 11:11:32
    #32053197
sergwsk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
Очень хорошо это делать на клиенте:-)). Особенно, когда записей несколько миллионов.
...
Рейтинг: 0 / 0
26.09.2002, 11:18:25
    #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
26.09.2002, 11:51:08
    #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
26.09.2002, 11:55:45
    #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
26.09.2002, 12:08:04
    #32053226
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
2Bzzzzz И так какит и этак, а если еще подумать, то можно как нибудь по другому придумать :)
...
Рейтинг: 0 / 0
26.09.2002, 13:50:41
    #32053284
AlexP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двоиники
2fima
> Если же у Вас первичный ключ есть то соответственно из примера Вам нужно только удаление

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


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