举一反三思路思考形如(列=参数 or decode函数)

1、问题

最近又遇到新鲜的语句写法

bash 复制代码
select count(1) from test
where (c1=5
or DECODE(c1, 1, 6, NULL, 6, c1) =6
);

计划:

首先语句主要的问题在于or条件

首先理解decode函数

bash 复制代码
DECODE(expression, search1, result1, search2, result2,..., default_result)
expression:是要进行判断的表达式。
search1、search2等:是依次要与expression进行比较的值。
result1、result2等:是当expression与相应的search值相等时返回的结果。
default_result:是当expression与所有的search值都不相等时返回的默认结果。

那么可以得出

DECODE(c1, 1, 6, NULL, 6, c1) =6

C1=1结果赋值为6,null结果赋值为6,其他还是c1,最终满足等于6的条件。

还记得之前分享过形如(列 is null or 列等值)改写成nvl,此时利用举一反三思维,

最终其实就是求c1=5,1,null,然后null可以用nvl,最终

(c1=5

or DECODE(c1, 1, 6, NULL, 6, c1) =6

);

改成nvl(c1,6) in (1,5,6)

2、改写

bash 复制代码
select count(1) from test
where (nvl(c1,6) in (1,5,6)
)

计划:

**

3、小结

**

本次想分享的是举一反三思路,null和or要思考之前or改写的案例,这样遇到同类场景就有优化的招数。

相关推荐
l1t1 小时前
duckdb 1.6dev新增的.manual命令
开发语言·数据库
辉灰笔记1 小时前
第一篇:MySQL8.0生产备份实战|XtraBackup全自动全量+增量备份(钉钉告警+异地Binlog归档)
数据库·mysql·钉钉·运维开发
山峰哥2 小时前
‌Explain实战:打开数据库执行计划的黑盒‌
大数据·服务器·数据库·sql·深度优先·宽度优先
ClickHouseDB2 小时前
ClickHouse 26.6 版本发布说明
数据库
Wang's Blog2 小时前
Java框架快速入门:深入MyBatis-Plus高级DML操作(ID策略·逻辑删除·乐观锁)
java·数据库·mybatis
小二·13 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手14 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌14 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
蓝天下的守望者14 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库