Найти дублирующую строку "детали" в таблице - PullRequest
1 голос
/ 08 февраля 2011
OrderId  OrderCode  Description
-------------------------------
1        Z123       Stuff
2        ABC999     Things
3        Z123       Stuff

У меня есть дубликаты в таблице, как указано выше. Я пытаюсь получить отчет о том, какие ордера являются дубликатами, а какие ордера являются дубликатами, чтобы я мог выяснить, как они попали в базу данных.

Так что в идеале я бы хотел получить что-то вроде:

OrderId    IsDuplicatedBy
-------------------------
1          3
3          1

Я не могу понять, как закодировать это в SQL.

1 Ответ

2 голосов
/ 08 февраля 2011

Вы можете использовать одну и ту же таблицу дважды в одном запросе и присоединяться к полям, по которым необходимо проверить. T1.OrderID <> T2.OrderID необходимо, чтобы не найти дубликат для той же строки.

declare @T table (OrderID int, OrderCode varchar(10), Description varchar(50))
insert into @T values
(1, 'Z123', 'Stuff'),
(2, 'ABC999', 'Things'),
(3, 'Z123', 'Stuff')

select
  T1.OrderID,
  T2.OrderID as IsDuplicatedBy
from @T as T1
  inner join @T as T2
    on T1.OrderCode = T2.OrderCode and
       T1.Description = T2.Description and
       T1.OrderID <> T2.OrderID

Результат:

OrderID IsDuplicatedBy
1   3
3   1
...