Удалить дубликаты из приведенного ниже SQL-запроса - PullRequest
0 голосов
/ 29 ноября 2011

Таблица SQL

id       component   price  manufactured
1         fx card   500     2011
2         ram       400     2010
3         case      400     2010
4         smps      500     2011
5         cord      200     2010
6         usb       200     2010

Ожидаемый объем производства (Возврат компонентов с одинаковой ценой и годом выпуска в виде отдельных комбинаций):

component   component   price   manufactured
smps        fx card     500     2011
case        ram         400     2010
cord        usb         200     2010

Запрос попытался

SELECT m1.[component]
  ,m2.[component]
  ,m1.[price]
  ,m1.[manufactured]
FROM [dbo].[Mfg] m1
inner join [dbo].[Mfg] m2
on m1.component != m2.component 
and m1.price = m2.price 
and m1.manufactured = m2.manufactured

Результат запроса выше (хотя неправильный вывод):

component   component   price   manufactured
smps        fx card     500    2011
case        ram         400    2010
cord        usb         200    2010
ram         case        400    2010
fx card     smps        500    2011
usb         cord        200    2010

Пожалуйста, помогите мне удалить дубликаты комбо, используя запрос.

1 Ответ

0 голосов
/ 29 ноября 2011

Это работает, если ни одна пара компонентов не имеет одно и то же имя:

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 уникален, поэтомуэто не может пойти не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...