如何更新,存在和不同之处

问题描述

您好,我正在尝试仅对“ 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'
   );

您尚未限定所有列名,但我认为这是您想要的查询。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...