SQL不包括2列组合的重复值

时间:2013-04-08 21:05:07

标签: sql join duplicate-removal

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

1 个答案:

答案 0 :(得分:0)

我认为&#34;型号数量更多,型号数量更少&#34;在问题陈述中,您需要在某处获得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}将会确定无法使用。