2013-11-07 4 views
1

Я использую MS SQL Server 2005 Express. У меня есть таблица INVENTORY, и я хочу получить все пары продуктов, которые имеют один и тот же цвет (например).Удалить кортежи для simetrics в SQL SELECT

Итак, у меня есть следующий запрос:

SELECT I1.ProdId,I2,ProdId FROM Inventory AS I1,Inventory AS I2 
WHERE I1.Color=I2.Color 
ORDER BY I1.ProdId 

Это будет возвращать некоторые, как это:

ProdId|ProdId 
------------- 
    1 | 2 
    1 | 3 
    2 | 1 
    2 | 3 
    3 | 1 
    3 | 2 

мне нужны symetric кортежи (например, 1-2, 2-1) показывает только один кортеж.

У кого-нибудь есть идея? Благодаря!

ответ

0
SELECT I1.ProdId, 
     I2,ProdId 
FROM Inventory AS I1, 
    Inventory AS I2 
WHERE I1.Color=I2.Color 
    AND (
     -- here I get the rows without the symmetric 
     I1.ProdId || '-' || I2,ProdId <> I2.ProdId || '-' || I1,ProdId 
     OR 
     (
      -- here I get the rows with the symmetric but only with the first id 
      -- smaller than the second, so excluding 'duplication' 
      I1.ProdId || '-' || I2,ProdId <> I2.ProdId || '-' || I1,ProdId 
      AND 
      I1.ProdId < I2.ProdId 
     ) 
    ) 
ORDER BY I1.ProdId 
+0

Спасибо! Ваш запрос не работает должным образом, но был очень полезен. Я немного изменил его и отлично работал. В конце это выглядит так: SELECT I1.ProdId, I2.ProdId Из пеликалей AS P1, пестикулы AS P2 WHERE P1.idIdiomaOriginal = P2.idIdiomaOriginal И I1.ProdId <> I2.ProdId AND I1.ProdId < I2.ProdId ORDER BY I1.ProdId –

Смежные вопросы