1

我正在练习 sql-ex.ru 的练习 16。问题如下:

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 的值被翻转并计为不同的值。有没有一种简单的方法来摆脱这样的重复?我在这方面有点迷失了。

4

1 回答 1

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}肯定会退出。

于 2013-04-08T21:08:31.400 回答