ray88’s diary

お仕事で困ったとき用の自分用の覚書

SQL指南書 比較述語とNULL② CASE式とNULL

SQL 指南書集 目次 - ray88’s diary
■CASE式で間違えがちなSQL文の例
以下のSQLが絶対に「×」を返さない理由
・「WHEN NULL THEN」は「WHEN col_1 = NULL」の省略系である。
・よって、NULL判定の結果は常にunknown となる
・WHEN句と同様にCASE式の評価方法も true の場合のみ有効となるため。

--col_1 が1なら「〇」をNULLなら「×」を返すCASE式?
SELECT 
	id
	,col_1
	,CASE col_1
	WHEN 1 THEN ''
	WHEN NULL THEN '×'
	END AS result
FROM check_blank;


■正しいSQL
 検索CASE式を使用して以下のように記述する

--正しいSQL文
SELECT 
	id
	,col_1
	,CASE WHEN col_1 = 1 THEN ''
	      WHEN col_1 IS NULL THEN '×'
	 END AS result
FROM check_blank;


テーブル作成用SQL

CREATE TABLE check_blank
(id VARCHAR(16) PRIMARY KEY,
 col_1 INTEGER);
 
 INSERT INTO check_blank VALUES('a',1);
 INSERT INTO check_blank VALUES('b',NULL);
 INSERT INTO check_blank VALUES('c',1);
 INSERT INTO check_blank VALUES('d',NULL);