2013-04-08 5 views
1

Я работаю над упражнением 16 из sql-ex.ru. Проблема спрашивает следующее:SQL не включая повторяющиеся значения в комбинации из 2 столбцов

Find the pairs of PC models having identical speeds and RAM. 
As a result, each resulting pair is shown only once, i.e. (i, j) but not (j, i). 
Result set: model with higher number, model with lower number, speed, and RAM. 

схема базы данных:

Product(maker, model, type) 
PC(code, model, speed, ram, hd, cd, price) 
Laptop(code, model, speed, ram, hd, screen, price) 
Printer(code, model, color, type, price) 

Я написал следующий запрос:

SELECT A.model, B.model, A.speed, A.ram 
FROM PC A 
JOIN PC B ON (A.model<>B.model) 
WHERE A.speed=B.speed 
AND A.ram=B.ram 

Но это показывает дубликаты I, J, как J, I , Вот мой результат:

model model speed ram 
1121 1233 750 128 
1232 1233 500 64 
1232 1260 500 32 
1233 1121 750 128 
1233 1232 500 64 
1260 1232 500 32 

Как вы можете видеть, значения I, J перевернуты и учитываются как отдельные значения. Есть ли простой способ избавиться от дубликатов? Я отчасти теряю эту роль.

ответ

0

Я думаю, что «модель с более высоким номером, модель с более низким номером» в заявлении проблемы является ключом к тому, что вам нужно иметь состояние A.model > B.model. Регистрация ON-й состояние звучит как прекрасный кандидат:

SELECT A.model, B.model, A.speed, A.ram 
FROM PC A 
JOIN PC B ON (A.model > B.model) -- <<<=== Here 
WHERE A.speed=B.speed 
AND A.ram=B.ram 

<> симметричен; > нет. Переключение на > гарантирует, что если {i, j} находится, то {j, i} будет без гарантии.

+0

Это имеет смысл. Не думал о симметричных значениях. – Paul

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