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