表 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
答案 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
祝你好运。