У меня есть таблица с записями и их оценками (таблица «Предложения»):
OfferId OfferScore
----------- -----------
1 1
2 20
3 3
4 4
5 5
6 6
7 7
8 8
Эти записи могут быть связаны.Все отношения хранятся в таблице «OffersRelation»:
OfferId1 OfferId2
----------- -----------
1 2
1 3
1 4
1 5
2 3
3 5
7 8
Я хочу удалить все связанные идентификаторы (внутри группы) из таблицы «Предложения» и оставить только те, которые имеют наивысший балл.
В моем случае:
Предложения с идентификаторами: 1,2,3,4,5 связаны («группа»), а предложение с идентификатором 2 имеет наивысший балл: 20, поэтому я хочу удалить идентификаторы:1,3,4,5 и оставьте только одного с id: 2 из этой «группы».
Предложение с идентификатором: 6 не имеет связанных элементов (никаких отношений в таблице OffersRelations), поэтомуостается в таблице Предложения.
Предложения с идентификаторами: 7,8 связаны, и Предложение с идентификатором 8 имеет более высокий балл, чем 7, поэтому я хочу удалить предложение с идентификатором 7 и оставить предложение с идентификатором:8 из этой «группы».
Ожидаемый результат в таблице Предложения:
OfferId OfferScore
----------- -----------
2 20
6 6
8 8
Как это сделать в t-sql?
Данные из примеров:
drop table if exists dbo.Offers
drop table if exists dbo.OffersRelation
CREATE TABLE [dbo].[Offers](
[OfferId] [int] NOT NULL,
[OfferScore] [int] NOT NULL
)
GO
CREATE TABLE [dbo].[OffersRelation](
[OfferId1] [int] NOT NULL,
[OfferId2] [int] NOT NULL
)
GO
INSERT INTO [dbo].[Offers]
([OfferId],[OfferScore])
VALUES (1,1),(2,20),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8)
INSERT INTO [dbo].[OffersRelation]
([OfferId1]
,[OfferId2])
VALUES
(1,2),
(1,3),
(1,4),
(1,5),
(2,3),
(3,5),
(7,8)