选择数据时mysql查询中的逻辑错误

时间:2013-01-31 05:54:34

标签: mysql sql select

pc -

 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肯定是正常工作,但是当我尝试将查询减少到仅使用价格时,它没有显示正确的结果。我知道我在逻辑中缺少什么。

  

查找具有PC的型号,速度和硬盘容量   12张CD和价格低于600美元或24倍CD和价格低于   $ 600

3 个答案:

答案 0 :(得分:3)

由于AND位于OR之前,您的查询将被解释为:

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

或者,用文字表示:所有具有12x CD的PC或PC < 600美元,24x CD


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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

尝试使用IN:

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