生产上遇到了一个新的update set = (...),但是两表没有关联,跟之前文章里提到的不一样,今天我们就进行下改写,先问下deepseek吧。

看看deepseek的回答:

根据deepseek的分析,我们在测试环境下尝试下改写:
原sqlupdate DLSQS.TEST
set OUTCOMPANY_CSRY =
(select NAME from DLSQS.COMPANY_USER_INFO where EMPLOYEE_NO = :1)
where PRODUCT_NAME = :2
and CUST_ID = :3
and CORP_ORG_NAME = :4
and DATA_DATE = :5
and STATUS = '0'
and OUTSOURCE_STATUS = '0' 尝试改写:
merge into TEST a
using (select coalesce(b.NAME, null) NAME ,'A' AS M FROM DUAL LEFT JOIN
COMPANY_USER_INFO b
where EMPLOYEE_NO = :1) b
on (a.PRODUCT_NAME = :2 and a.CUST_ID = :3 and a.CORP_ORG_NAME = :4 and a.DATA_DATE = :5 and a.STATUS = '0' and a.OUTSOURCE_STATUS = '0')
when matched then
update set a.OUTCOMPANY_CSRY = b.name经验证查询结果符合业务结果!另外注意如果没有加入 DUAL LEFT JOIN 的话,在EMPLOYEE_NO = :1COMPANY_USER_INFO表没有值的时候,不会进行更新操作,与原sql业务逻辑不符,所以需要加入该段代码。
最后修改时间:2025-04-07 08:40:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




