とんかつのはじっこ

備忘録やら戯言。

SQL克服!COALESCEについて

普段何気なく使っていた「COALESCE(コアレス)」。ちょっと思っていたのと違ったので、少しまとめてみました。

英単語としての意味

主な意味は、「癒合(ゆごう)する」「合体する」「複数のものを1つにまとめる」という意味がある。

関数

COALESCEは、NULLでない最初の引数を返します。 全ての引数がNULLの場合にのみNULLが返されます。
つまり、複数の項目のうち初めのNULLでない値を表示する。ということ。

どこに勘違い…?

ここで、複数というのがミソ。
普段COALESCEを見る場合は、『値がない場合に〇〇を表示する』と言ったもの。

COALESCE(table.num, 0)

これが、勘違いの原因。引数は2つだけと思っていた。ORACLEでいうNVL関数(Null Value Logic)と同じものだとばかり…。

さて、このような状態で複数の場合で表示してほしいと言われました。『例えば、電話番号の欄には、従業員電話番号1、なければ従業員電話番号2、なければ"該当データなし"と表示』
複数の場合ね、CASE文でもできそうだけど、COALESCEの入れ子の方法を探してみることに…。
でも、探してみ見つからない。仕方なく我流で実装してみることに。

COALESCE(emp.tel1, COALESCE(emp.tel2, '該当データなし'))

実行してみると、想定通り。よしできた。
ちょっと待って!!

COALESCEは複数できるの!だから上記のソースは下のように書き換えられる。

COALESCE(emp.tel1, emp.tel2, '該当データなし')

これで、とてもスマートになった。
同じような勘違いをしている人が減りますように。