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

相关推荐
2601_957084843 小时前
2026年生产型服装供应链SCM系统丨水洗参数、产能与验收节点架构
数据库·scm·服装供应链系统·服装scm·服装供应链
IvorySQL8 小时前
PostgreSQL 日报|恢复期 COPY TO 未日志表修复(10 月 21 日)
数据库·postgresql·区块链
贝猫说python10 小时前
大模型比赛2.3智能体开发(工具调用智能问答助手)
数据库·oracle
许彰午11 小时前
28-ORA-01110数据文件读取错误
数据库·oracle
凯凯姜11 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
猫咪很可爱12 小时前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP13 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner13 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈14 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶14 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba