【发布时间】:2019-12-28 21:29:24
【问题描述】:
我在 Teradata SQL Server 中运行查询时收到此错误消息“失败 7547 目标行已被多个源行更新。”
我知道我必须删除重复的行,但我不知道该怎么做。
MERGE INTO ${DTTK_COMMON_default_database}.LA1DB51CTERELCTE AS TGT
USING (SELECT SWTBAJAF
,NUMCLIENTE
,CSI
,CTR_NUMCSIR
,CTE_NUMREL
,CTR_TIPOREL
,CTR_NUMNOM
,CTR_TIPPAR
,CTR_PORCENT
,CTR_PUESTO
,CTE_FEALTA_2K
,CTE_FEMODI_2K
,FECINF
FROM ${DTTK_COMMON_default_database}.LA1DB51CTERELCTE_STG)
AS SRC
ON
TGT.NUMCLIENTE = SRC.NUMCLIENTE AND
TGT.CSI = SRC.CSI AND
TGT.CTR_NUMCSIR = SRC.CTR_NUMCSIR AND
TGT.CTE_NUMREL = SRC.CTE_NUMREL AND
TGT.CTR_TIPOREL = SRC.CTR_TIPOREL
WHEN MATCHED THEN UPDATE
SET
SWTBAJAF = SRC.SWTBAJAF
,CTR_NUMNOM = SRC.CTR_NUMNOM
,CTR_TIPPAR = SRC.CTR_TIPPAR
,CTR_PORCENT = SRC.CTR_PORCENT
,CTR_PUESTO = SRC.CTR_PUESTO
,CTE_FEALTA_2K = SRC.CTE_FEALTA_2K
,CTE_FEMODI_2K = SRC.CTE_FEMODI_2K
,FECINF = SRC.FECINF
WHEN NOT MATCHED THEN INSERT
(SWTBAJAF
,NUMCLIENTE
,CSI
,CTR_NUMCSIR
,CTE_NUMREL
,CTR_TIPOREL
,CTR_NUMNOM
,CTR_TIPPAR
,CTR_PORCENT
,CTR_PUESTO
,CTE_FEALTA_2K
,CTE_FEMODI_2K
,FECINF)
VALUES
(SRC.SWTBAJAF
,SRC.NUMCLIENTE
,SRC.CSI
,SRC.CTR_NUMCSIR
,SRC.CTE_NUMREL
,SRC.CTR_TIPOREL
,SRC.CTR_NUMNOM
,SRC.CTR_TIPPAR
,SRC.CTR_PORCENT
,SRC.CTR_PUESTO
,SRC.CTE_FEALTA_2K
,SRC.CTE_FEMODI_2K
,SRC.FECINF);
因此,我需要从表中删除重复的行。
【问题讨论】:
-
这表示 ON 列(NUMCLIENTE、CSI、CTR_NUMCSIR、CTE_NUMREL、CTR_TIPOREL)的组合在源 LA1DB51CTERELCTE_STG 表中不是唯一的。如果源行 100% 相同,则可以像将 DISTINCT 添加到源查询一样简单。否则你必须想出一个规则来决定你要应用哪一个。