简体   繁体   中英

How to Update, Where Exists and Distinct

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM