注册

语句中连续两个exists之后没有没有命中数据

得鹿梦鱼 2025/12/10 219 5

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:V8
【操作系统】:麒麟V10
【CPU】:
【问题描述】*:收到反馈查询不到数据,语句如下:select * from S_CHANGE_LOG t where t.app_no = 'SC91346795086257'
and exists(select 1 from A_PAY_FLOW s where t.app_no = s.acct_no and s.cons_no = '3' and s.rcv_amt <0)
and exists(select 1 from A_PAY_FLOW s where t.app_no = s.acct_no and s.cons_no = '4' and s.rcv_amt >0)。
这句话在oracle中可以正常命中数据,达梦中没有。对两个exists数据单独执行都可以查询到,就是说数据正常情况下应该是可以返回的。
对语句改成join之后也能正常查询,为什么连续exists不行?执行计划如下

1 #NSET2: [1, 1, 752]
2 #PIPE2: [1, 1, 752]
3 #PRJT2: [1, 1, 752]; exp_num(19), is_atom(FALSE)
4 #SLCT2: [1, 1, 752]; NOREFED_EXISTS_SSS
5 #BLKUP2: [1, 7, 752]; IN_CHANGE_LOG_APP_NO(T)
6 #SSEK2: [1, 7, 752]; scan_type(ASC), IN_CHANGE_LOG_APP_NO(S_CHANGE_LOG as T), scan_range['SC91346795086257','SC91346795086257'], is_global(0)
7 #SPL2: [1, 1, 126]; key_num(1), spool_num(0), is_atom(FALSE), has_var(0), sites(-), result_cache(FALSE)
8 #PRJT2: [1, 1, 126]; exp_num(1), is_atom(FALSE)
9 #SLCT2: [1, 1, 126]; FALSE
10 #CSCN2: [1, 66, 126]; INDEX33555762(A_PAY_FLOW as S); btr_scan(1)

回答 0
暂无回答
扫一扫
联系客服