sql - Oracle SQL : What is the point of this DECODE statement?

标签 sql oracle

我正在维护其他人编写的一些 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/

相关文章:

mysql - SQL - 如何在单行计算后对数据进行分组

MySQL嵌套查询执行

java - 根据列值不同的集合

oracle - "Alter session"通过计划作业上的登录触发器

oracle - 从oracle中的存储过程分配输出参数

php - 如何在mysql数据库中插入带有文件 uploader 值的多个文本框?

php - 带有参数数组的 SQL 请求

mysql - SQL - 最小函数

java - 如何检查我们在 jdbc 中使用的是 oracle 8i 数据库?

sql - 如何从表中选择不同列中三个或多个值相同的行?