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, '該当データなし')
これで、とてもスマートになった。
同じような勘違いをしている人が減りますように。