powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Убрать дупликаты из связанной таблицы
3 сообщений из 3, страница 1 из 1
Убрать дупликаты из связанной таблицы
    #32075849
Snark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такие данные :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE [Author]([AuthID] [int] NOT NULL ,[Name] [varchar] ( 1 ) NULL) ON [PRIMARY]
CREATE TABLE [Ref_Author]([RefID] [int] NOT NULL,[AuthID] [int] NOT NULL) ON [PRIMARY]

INSERT INTO Author (AuthID, Name) VALUES( 1 ,'A')
INSERT INTO Author (AuthID, Name) VALUES( 2 ,'A')
INSERT INTO Author (AuthID, Name) VALUES( 3 ,'B')
INSERT INTO Author (AuthID, Name) VALUES( 4 ,'C')
INSERT INTO Author (AuthID, Name) VALUES( 5 ,'C')

INSERT INTO Ref_Author (RefID,AuthID) VALUES( 1 , 1 )
INSERT INTO Ref_Author (RefID,AuthID) VALUES( 2 , 2 )
INSERT INTO Ref_Author (RefID,AuthID) VALUES( 3 , 3 )
INSERT INTO Ref_Author (RefID,AuthID) VALUES( 4 , 4 )
INSERT INTO Ref_Author (RefID,AuthID) VALUES( 5 , 5 )

необходимо найти запись с минимальным значением AuthID, для каждой группы дупликатов, вот этим методом :
Код: plaintext
1.
Select Min(AuthID) As MinAuthID FROM AUTHOR GROUP BY Name HAVING Count(AuthID)> 1 

и update Ref_Author.AuthID значением MinAuthID из предыдущего запроса
для тех записей в Ref_Author где AuthID входит в соответствующие группы дупликатов из таблицы Author

в итоге необходимо получить такой результат :
Код: plaintext
1.
2.
3.
4.
5.
6.
RefID     AuthID
 1            1 
 2            1 
 3            3 
 4            4 
 5            4 


Спасибо за любые советы,
Regards, Snark
...
Рейтинг: 0 / 0
Убрать дупликаты из связанной таблицы
    #32075960
Arch-saint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPDATE Ref_Author SET Ref_Author.AuthID=MinAuthID
FROM
(Select Min(AuthID) As MinAuthID, [Name] FROM Author
GROUP BY [Name] HAVING Count(AuthID)>1) as tbl1
WHERE Ref_Author.AuthID in (Select AuthID FROM Author WHERE tbl1.[Name]=Author.[Name])
...
Рейтинг: 0 / 0
Убрать дупликаты из связанной таблицы
    #32075965
Фотография Александр Степанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
UPDATE r
Set
	AuthID=dup.MinAuthID
From
	[Ref_Author] r
	inner join Author a
		on r.AuthID=a.AuthID
	inner join
	(
	Select 
		Min(AuthID) As MinAuthID,
		Name As Name
	FROM AUTHOR 
	GROUP BY 
		Name 
	HAVING 
		Count(AuthID)> 1 
	) dup
		on dup.name=a.name and a.authID<>dup.MinAuthID
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Убрать дупликаты из связанной таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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