2

台式电脑-

 code   model   speed   ram hd  cd  price
 1  1232    500 64  5.0 12x 600.0000
 10 1260    500 32  10.0    12x 350.0000
 11 1233    900 128 40.0    40x 980.0000
 12 1233    800 128 20.0    50x 970.0000
 2  1121    750 128 14.0    40x 850.0000
 3  1233    500 64  5.0 12x 600.0000
 4  1121    600 128 14.0    40x 850.0000
 5  1121    600 128 8.0 40x 850.0000
 6  1233    750 128 20.0    50x 950.0000
 7  1232    500 32  10.0    12x 400.0000
 8  1232    450 64  8.0 24x 350.0000
 9  1232    450 32  10.0    24x 350.0000

所需的输出 -

model   speed   hd
1232    450 10.0
1232    450 8.0
1232    500 10.0
1260    500 10.0

查询 1 -

SELECT model, speed, hd
FROM pc
WHERE cd = '12x' AND price < 600
OR
cd = '24x' AND price < 600

查询 2 -

SELECT model, speed, hd
FROM pc
WHERE cd = '12x' OR cd = '24x' 
AND price < 600

查询 1 肯定工作正常,但是当我尝试将查询减少为一次只使用价格时,它没有显示正确的结果..让我知道我在逻辑中遗漏了什么。

查找具有 12x CD 且价格低于 600 美元或具有 24x CD 且价格低于 600 美元的 PC 的型号、速度和硬盘容量。

4

3 回答 3

3

由于AND来自 before OR,您的查询被解释为:

WHERE (cd = '12x') OR ((cd = '24x') AND (price < 600))

或者,换句话说:所有具有 12x CD 的 PC,或具有 24x CD 的价格低于 600 美元的 PC


您需要使用括号来指定操作顺序:

WHERE (cd = '12x' OR cd = '24x') AND price < 600

或者,您可以使用IN

WHERE cd IN ('12x', '24x') AND price < 600

另见:http ://dev.mysql.com/doc/refman/5.5/en/operator-precedence.html

于 2013-01-31T05:57:51.297 回答
2

在您的表中可能包含重复的行或列,请尝试使用 group by 子句,如下所示,您将在其中获得解决方案并在尝试这些后让我知道输出谢谢...

SELECT model, speed, hd
FROM PC 
WHERE cd IN ('12x','24x') AND price < 600
group by Model,speed,hd
于 2013-01-31T06:15:08.477 回答
1

尝试使用 IN:

SELECT model, speed, hd
FROM PC 
WHERE cd IN ('12x','24x') AND price < 600

祝你好运。

于 2013-01-31T05:58:16.647 回答