【SQL/UPDATE文】CASE式を使用して、条件により更新内容を分岐させる

以下のような製品テーブルがあるとします。

製品テーブル
製品テーブル

このテーブルに対し、
 ・お肉の価格(price)を2割引き
 ・果物を価格(price)を3割増し
 ・飲み物の価格(price)は変更なし
というように、1つのUPDATE文で
条件により更新内容を分岐させることができます!

更新内容を分岐できる
更新内容を分岐できる

CASE式を使用することで
実現できます!

PR

準備

以下の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')
テーブルの作成/データの登録
テーブルの作成/データの登録
PR

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               --上記以外は変更なし
更新内容をCASE式で分岐
更新内容をCASE式で分岐
PR

結果確認

SELECT文で単純にテーブルのデータを出力させて、更新内容に問題が無いことを確認します。

SELECT
	*
FROM m_product
更新内容の確認
更新内容の確認

 

CASE式は自由度が高く非常に便利です!

タイトルとURLをコピーしました