问题描述
您好,我正在尝试仅对“ 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'
);
您尚未限定所有列名,但我认为这是您想要的查询。