MySQL:価格更新の問題
1215 ワード
この問題は簡単で、Joe Celkoの「SQLプログラミングスタイル」から来て、少し修正します:いくつかの本に対して価格を更新して、30¥の10%を下回らないで、30¥の5%を下回らないでください.
まず表を作成します.
次のデータを挿入します.
メソッド1:カーソルの使用
カーソルを使用するには、ループを使用する必要があります.カーソルの使用は一般的に推奨されません.
UPDATEを2つ使用
実行後、データは次のとおりです.
30¥は更新後27¥になるはずですが、2番目のupdateで27¥を更新したので、結果は私たちが望んでいるものではありません.
UPDATE+CASEを1つ使用
実行後、データは次のとおりです.
結果は要求に合致した.
まず表を作成します.
CREATE TABLE `books` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`price` float NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
次のデータを挿入します.
+----+-------+
| id | price |
+----+-------+
| 1 | 30 |
| 2 | 10 |
+----+-------+
メソッド1:カーソルの使用
カーソルを使用するには、ループを使用する必要があります.カーソルの使用は一般的に推奨されません.
UPDATEを2つ使用
UPDATE books
SET price = price * 0.90
WHERE price>=30;
UPDATE books
SET price = price * 0.95
WHERE price<30;
実行後、データは次のとおりです.
+----+-------+
| id | price |
+----+-------+
| 1 | 25.65 |
| 2 | 9.5 |
+----+-------+
30¥は更新後27¥になるはずですが、2番目のupdateで27¥を更新したので、結果は私たちが望んでいるものではありません.
UPDATE+CASEを1つ使用
UPDATE books
SET price = CASE WHEN price >= 30
THEN price * 0.90
ELSE price * 0.95 END;
実行後、データは次のとおりです.
+----+-------+
| id | price |
+----+-------+
| 1 | 27 |
| 2 | 9.5 |
+----+-------+
結果は要求に合致した.