如何解决如何更新,存在和不同之处
您好,我正在尝试仅对“ DISTINCT”记录进行表更新,但是正在更新所有记录,有人可以帮助我吗? 非常感谢。
UPDATE SC20101
SET SC20101.C2_OBS = 'Ok'
FROM SC20101
WHERE EXISTS (
SELECT DISTINCT D3_OP,SC2.C2_DATRF,SC2BKP.C2_DATRF,SC2BKP.C2_OBS
FROM SD3010 SD3
LEFT JOIN SC2010 SC2 ON SC2.D_E_L_E_T_=' ' AND C2_FILIAL = D3_FILIAL AND D3_OP = C2_NUM + C2_ITEM + C2_SEQUEN
LEFT JOIN SC20101 SC2BKP ON SC2BKP.D_E_L_E_T_=' ' AND SC2BKP.C2_FILIAL = D3_FILIAL AND D3_OP = SC2BKP.C2_NUM + SC2BKP.C2_ITEM + SC2BKP.C2_SEQUEN
WHERE SD3.D_E_L_E_T_ = ' ' AND D3_OP <> ''
AND D3_EMISSAO BETWEEN '20200801' AND '20200831'
AND SC2.C2_DATRF IS NULL
AND D3_CF = 'PR0')
解决方法
如果在子查询中返回了 any 行,则
EXISTS
将返回true(这些列没有区别)。您正在使用LEFT JOIN
,因此您的EXISTS
等效于:
WHERE EXISTS (SELECT 1 FROM SD3010 SD3)
大约。过滤条件可能会有一些影响。
我猜您打算使用相关的子查询:
UPDATE SC20101
SET SC20101.C2_OBS = 'Ok'
FROM SC20101
WHERE EXISTS (
SELECT 1
FROM SD3010 SD3 JOIN
SC2010 SC2
ON SC2.D_E_L_E_T_=' ' AND C2_FILIAL = D3_FILIAL AND
D3_OP = C2_NUM + C2_ITEM + C2_SEQUEN
WHERE SC20101.D_E_L_E_T_=' ' AND
SC20101.C2_FILIAL = D3_FILIAL AND
D3_OP = SC20101.C2_NUM + SC20101.C2_ITEM + SC20101.C2_SEQUEN AND
SD3.D_E_L_E_T_ = ' ' AND
D3_OP <> '' AND
D3_EMISSAO BETWEEN '20200801' AND '20200831' AND
SC2.C2_DATRF IS NULL AND
D3_CF = 'PR0'
);
您尚未限定所有列名,但我认为这是您想要的查询。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。