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 は間違いなく正しく機能していますが、一度だけ価格を使用するようにクエリを削減しようとすると、正しい結果が表示されません..ロジックに欠けているものを教えてください。

12 倍速 CD で価格が 600 ドル未満の PC、または 24 倍速 CD で価格が 600 ドル未満の PC のモデル番号、速度、ハード ドライブ容量を調べます。

4

3 に答える 3

3

ANDの前に来るためOR、クエリは次のように解釈されます。

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

つまり、12 倍速 CD を備えたすべての PC、または 24 倍速 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 に答える