以下のような製品テーブルがあるとします。
このテーブルに対し、
・お肉の価格(price)を2割引き
・果物を価格(price)を3割増し
・飲み物の価格(price)は変更なし
というように、1つのUPDATE文で
条件により更新内容を分岐させることができます!
CASE式を使用することで
実現できます!
準備
以下のSQLを実行し、テーブルの作成/データの登録をします。
※分かりやすくするために、全てのレコードの列「price」には「1000」を登録します。
--テーブルの作成
CREATE TABLE m_product
(
id CHAR(3) PRIMARY KEY,
productName VARCHAR(60),
productType VARCHAR(15),
price INTEGER NOT NULL
)
--データの登録
INSERT INTO m_product VALUES('001','サーロインステーキ','お肉','1000')
INSERT INTO m_product VALUES('002','豚ロース500g','お肉','1000')
INSERT INTO m_product VALUES('003','鴨肉300g','お肉','1000')
INSERT INTO m_product VALUES('004','マンゴー','果物','1000')
INSERT INTO m_product VALUES('005','パイナップル','果物','1000')
INSERT INTO m_product VALUES('006','メロン','果物','1000')
INSERT INTO m_product VALUES('007','コーラ','飲み物','1000')
SQLと実行結果
ここでは例として、以下で更新します。
※更新内容をCASE式で分岐させます。
※上記で登録した通り、更新前の価格(price)は全て「1000」です。
・お肉の場合、価格(price)を2割引き
・果物の場合、価格(price)を3割増し
・飲み物の場合、価格(price)は変更なし
UPDATE m_product
SET price = CASE WHEN productType = 'お肉' THEN price * 0.8 --お肉を2割引き
WHEN productType = '果物' THEN price * 1.3 --果物を3割増し
ELSE price END --上記以外は変更なし
結果確認
SELECT文で単純にテーブルのデータを出力させて、更新内容に問題が無いことを確認します。
SELECT
*
FROM m_product
CASE式は自由度が高く非常に便利です!