我正在维护其他人编写的一些 Oracle sql 语句,并且在各处我不断看到相同的模式在许多语句和 pl/sql block 中重复出现:
select DECODE(NVL(t1.some_column,'~'),'~',t2.some_column,t1.some_column) some_column from t1, t2 where ...
现在,这不是与这个简单得多的语句相同吗?
select NVL(t1.some_column,t2.some_column) from t1, t2 where...
我不确定为什么解码和 nvl 被链接在原始查询中。单独进行 nvl 似乎是一种效率较低的方法。有人可以向我解释一下吗?
感谢您的见解!
最佳答案
哇,嗯,看起来编码很糟糕。
NVL(t1.some_column, t2.some_column)
...给出相同的结果。
我更喜欢 COALESCE
,不过:
COALESCE(t1.some_column, t2.some_column)
这样,如果您想添加第三个,只需:
COALESCE(t1.some_column, t2.some_column, t3.some_column)
看来,无论谁编写了原始代码,都希望它是可扩展的,只是不知道COALESCE
...
关于sql - Oracle SQL : What is the point of this DECODE statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1297482/