Убрать дупликаты из связанной таблицы

Snark
Дата: 05.12.2002 02:14:32
Есть такие данные :
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, для каждой группы дупликатов, вот этим методом :

Select Min(AuthID) As MinAuthID FROM AUTHOR GROUP BY Name HAVING Count(AuthID)>1

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

в итоге необходимо получить такой результат :

RefID AuthID
1 1
2 1
3 3
4 4
5 4


Спасибо за любые советы,
Regards, Snark
Arch-saint
Дата: 05.12.2002 11:06:48
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])
Александр Степанов
Дата: 05.12.2002 11:13:50
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