ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

MySQL ダウンロード毎に加算するカラムの初期値がNULLの場合でも、SQLだけで加算する方法

ダウンロードボタンをクリックされたら、カウントアップする仕様が、システムにあります。
download_tabeに、idカラムとdownload_countカラムがあり、idカラムの値で更新対象を特定して、download_countカラムを加算します。

id download_count
1 10
2 NULL
3 0
4 5

download_countカラムに数値が入っていれば、UPDATE文だけでカウントアップができます。

UPDATE download_tabe SET download_count = download_count+1 WHERE id = 3;

この方法では、idカラムが2の場合のように、download_countカラムの値がNULLの場合は更新できません。
NULLのままになります。

プログラミング中
Photo by KOBU Agency on Unsplash

CASE式を導入して解決

SET句の後の、download_countカラムに反映したい値を求める際に、CASE文が使えれば、対処できそうだと思って試してしました。
結果は対処できました。

UPDATE download_tabe SET download_count = (
    CASE WHEN download_count IS NULL THEN 1
              ELSE download_count+1
    END
) WHERE id = 2;

download_countカラムがNULLであれば、1を値とします。
download_countカラムがNULLでなければ、download_countカラムの値に1を加算します。

プログラムは、データベース上の値がどのようになっているのか気にすることなく、SQLのUPDATE文だけで、カウントアップを済ませられました。