Это работает, если ни одна пара компонентов не имеет одно и то же имя:
SELECT m1.[component]
,m2.[component]
,m1.[price]
,m1.[manufactured]
FROM [dbo].[Mfg] m1
JOIN [dbo].[Mfg] m2 ON m1.component > m2.component
AND m1.price = m2.price
AND m1.manufactured = m2.manufactured;
Все, что я изменил, это поменял оператор неравенства !=
на оператор greater than
.Таким образом, вы получаете каждую пару один раз вместо двух.
Чтобы обеспечить возможность идентичных имен :
JOIN [dbo].[Mfg] m2 ON m1.id > m2.id
AND m1.price = m2.price
AND m1.manufactured = m2.manufactured;
Я предполагаю, что id
уникален, поэтомуэто не может пойти не так.