举一反三思路思考形如(列=参数 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改写的案例,这样遇到同类场景就有优化的招数。

相关推荐
Pniubi1 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
数据库小学妹2 小时前
pgbouncer 事务池:prepared statement、临时表与会话状态
数据库·后端·postgresql
Lucifer三思而后行3 小时前
最近折腾了一下金仓数据库的备份恢复
数据库·备份恢复
草莓熊Lotso4 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
进击的荆棘5 小时前
MySQL——库的操作
数据库·mysql
2601_967980115 小时前
“小程序·云开发”上线 助力开发者的高效利器
数据库·存储管理·小程序云开发·云函数·开发者工具
zhangjw345 小时前
1-9 SELECT 查询基础:where、group by、having、order by、limit offset
数据库·postgresql·pg数据库
唐老板6 小时前
Postgres 慢查询,先取证再动手
数据库·ai编程
笃行35012 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员14 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范