Oracle SELECT查询优化:合并OR条件的替代写法咨询
简化你的Oracle查询条件
当然可以合并这些条件!让我们先拆解一下你原来的查询逻辑:你想筛选出OID为'2100',同时EXORID要么是'21096006'要么为空的记录。
首先,你会发现两个子条件都共享OID = '2100'这个判断,我们可以把它从括号里提出来,作为外层的公共条件,这样就能把EXORID的两个判断合并到一个括号里,写法更简洁:
SELECT * FROM ORD_TEST WHERE OID = '2100' AND (EXORID = '21096006' OR EXORID IS NULL);
关于你提到的(EXORID = '21096006' OR null)写法的说明
直接写OR null是行不通的,因为在SQL的逻辑运算中,null代表“未知”。当你写EXORID = '21096006' OR null时,只有当EXORID确实等于指定值时,整个条件才会返回true;如果EXORID是null,这个条件会返回unknown,而WHERE子句只会筛选出条件为true的行,所以无法匹配到EXORID为空的记录。
另一种简化方式:使用NVL函数
如果你喜欢更紧凑的写法,也可以用Oracle的NVL函数来处理null值,把EXORID的null值替换成目标值,再进行比较:
SELECT * FROM ORD_TEST WHERE OID = '2100' AND NVL(EXORID, '21096006') = '21096006';
不过要注意:如果EXORID字段有索引,使用NVL可能会导致索引无法被利用(因为函数会改变字段的原始值),所以更推荐第一种提取公共条件的写法,既直观又能保证查询性能。
内容的提问来源于stack exchange,提问作者Symonds
相关产品推荐
相关产品推荐

