为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8
【操作系统】:kylin v10
【CPU】:x86
【问题描述】*:达梦数据库判断字段是否为null时,明明字段非空确查不出数据来
以下是简化的sql:
1.不执行where条件能够查出RULE_NAME的值
2.加上"RULE_NAME IS NOT NULL"条件后查询结果为空:
3.如果少关联一个表,执行where条件又能查出数据来
项目使用dm8_20210927_x86_rh6_64_ent_8.1.2.70_pack2.iso安装,数据库版本为:
从官网上下载最新版,就不存在这个问题,但是项目需要兼容旧版,请大佬帮忙分析下原因。
问题sql:
select * from (select
CASE
WHEN a1.id = 1 THEN a2.RULE_NAME
WHEN a1.id = 2 THEN a3.ALARM_NAME
ELSE a4.ALARM_NAME END RULE_NAME
from (select 2 as id from dual) a1
left join T_ALARM_NOTICE_CONFIG a2 on a1.id =a2.id
left join T_SYS_RESOURCE_ALARM_RULE a3 on a1.id =a3.id
left join T_CHECK_ACCOUNTS_ALARM_RULE a4 on a1.id =a4.id ) AA WHERE AA.RULE_NAME IS NOT NULL;
应该是旧版本在这里优化处理的时候有问题,可以看下几个语句的执行计划