ex. select coalesce(col1, col2, col3) from table1.
coalesce依序判斷 col1, col2, col3是否 not null. 若三者皆 not null, 回傳 col1.
這裡面其實已經隱含了 if else的架構,我們只需要適當的分析我們的條件套進去
例如:
select (case when col0<>0
then col1
else
case when col00 is null
then col2
else col3
end
end
) as col
from EMPLOYEE_WRITE_OFF ewo
join EMPLOYEE_SALARY_DETAIL esd on esd.AUTO_ID=ewo.EMPLOYEE_SALARY_AUTO_ID
可以改寫成如下:
select
coalesce
(
-- if
case when col0<>0 then col1 else null end
-- else
-- if
, case when col00 is null then col2 else null end
-- else
, case when col00 is not null then col3 else null end
) as col
from table1
至於哪一種比較方便或清楚
可以用 coalesce時個人是喜歡 coalesce.
寫的時候,兩種其實沒甚麼差別.
就像那種超過 200行的 if else
( 就真接手過這種系統
裡面幾乎所有的主要邏輯
都有 200行以上的 if else(if), 噩夢)
寫的時候都是逐步插進去的
( 最好是那種2 300行甚至高達 500多行的 if else
會是 waterfall式地一氣呵成寫下來
有能力在腦袋裡想完這 2 300行 if else
為什麼不把時間用在將程式碼規畫好
該抽出去的抽出去)
寫起來沒啥難的
被表到的是接手的人
--------------------------------
題外話:
以前看混沌理論的介紹書的時候
介紹到科學家羅倫茲的時候
提過一段軼事
說研究生偷偷看了羅倫茲的程式碼
幾千行程式碼不分段落一氣呵成寫下來
望之如有字天書
用來烘襯羅倫茲的天才
寫程式讀程式的時候常會想起這個小故事
引以為 anti-pattern
關起門來愛怎麼搞怎麼搞
難以維護也是保護自己程式的方法之一(真這樣想的人大概不知道甚麼叫混淆器)
只要自己能維護就好
別人管不著
但是在 team work, 在企業環境中
這種人是不是天才有待考證
可以確定的稱號之一叫毒瘤
但如果是忘光後回來重看
我覺得 coalesce寫法我的呆瓜腦袋比較容易吸收:Q