注册

两条sql语句,条件完全一样,但执行的结果不一样

Gyrfalcon 2023/08/22 607 3

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
**sql1:**SELECT PERSON.BUDGET_DEPT,
NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) AA
FROM T_BMS_BILL_MAIN MAIN, T_BMS_BILL_PERSON PERSON
WHERE MAIN.ID = 'BBM202308171946536E6AB3D894884C06B0AE1C5B4B4972E4'
AND PERSON.MAIN_ID = MAIN.ID
AND (INSTR('@(SDT202304111030202DD103A289B44B2A81FD8185CC9FD866)',
'@(' || NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) || ')') <= 0)
AND (PERSON.ORIGINAL_CURRENCY_SUM) != 0; -- 此sql执行结果正确!
此sql的执行计划:771b901199e2fa297637c5d1111f7d8.jpg

sql2: SELECT PERSON.BUDGET_DEPT
FROM T_BMS_BILL_MAIN MAIN, T_BMS_BILL_PERSON PERSON
WHERE MAIN.ID = 'BBM202308171946536E6AB3D894884C06B0AE1C5B4B4972E4'
AND PERSON.MAIN_ID = MAIN.ID
AND (INSTR('@(SDT202304111030202DD103A289B44B2A81FD8185CC9FD866)',
'@(' || NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) || ')') <= 0)
AND (PERSON.ORIGINAL_CURRENCY_SUM) != 0; -- 此SQL执行结果不正确!
此sql的执行计划:8661225f17a54c1899cbb4a506a33bf.jpg

备注:两个sql在oracle中执行结果一致,均完全正确!

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