Hello I am trying to perform an update on a table only the records of "DISTINCT" but is updating all records, can someone help me? Thank you very much.
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')
EXISTS
returns true if any row is returned in the subquery (the columns don't make a difference). You are using LEFT JOIN
, so your EXISTS
is equivalent to:
WHERE EXISTS (SELECT 1 FROM SD3010 SD3)
Well, approximately. The filtering conditions might have some impac.
I am guessing that you intend a correlated subquery:
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'
);
You haven't qualified all the column names but I think this is query you want.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.