INSERT INTO WHERE NOT EXISTS - 获取重复键错误

INSERT INTO WHERE NOT EXISTS - Getting Duplicate Key Error

当我执行以下命令时,我不断收到重复键错误。我不知道我做错了什么来产生这个错误。有人可以看看我错过了什么吗?谢谢!

INSERT INTO tblApp_Risk (AppID, BusiRisk, TechRisk, InterimRiskMitigate, RiskMitigateDesc, KeyDriverDesc, ITSvcsKeyDriver,
RMStartOrderReason, ESMVendorRisk, KeyManRisk, MultVersBehind, ProdStabRisk, RegCompRisk, TierArchGap)
    SELECT DISTINCT 
        P.AppID1, R.BusiRisk, R.TechRisk, R.InterimRiskMitigate, 
        R.RiskMitigateDesc, R.KeyDriverDesc, R.ITSvcsKeyDriver,
        R.RMStartOrderReason, R.ESMVendorRisk, R.KeyManRisk, R.MultVersBehind, 
        R.ProdStabRisk, R.RegCompRisk, R.TierArchGap
    FROM 
        tblProject P 
    INNER JOIN 
        tblRisk R ON P.ProjID = R.ProjID  
    WHERE 
        NOT EXISTS (SELECT *
                    FROM tblApp_Risk K 
                    WHERE K.AppID = P.AppID1) 
        AND P.AppID1 IS NOT NULL;

如果不查看您的数据很难知道,但我猜想内部联接是一对多,因此您试图多次插入相同的键。

您的 select DISTINCT 仅在所有字段都相同时进行过滤

SELECT DISTINCT 
        P.AppID1, R.BusiRisk, ...

所以如果你有

 field1 field2 field3
 A        B      C
 A        D      E
 X        Y      Z
 X        Y      Z


select distinct field1, field2, field3

将 return 三行,将过滤 X 行,但会为您提供 A

的重复键

AppID 列很可能是造成错误的原因,因为我猜您在连接上有一对多关系。您需要删除该列或一对多关系中任何其他键列的唯一约束,或者只是不插入该值。通常在执行连接插入时,您会为转储 table 创建一个键,该键不是连接 table 的键。例如一个键列,如 AppRiskId.