合并来自另一个 table 的数据时违反主键

Primary key violation while merging data from another table

我有两个表,TBTC03 和 TBTC03Y,TBTC03Y 有两个额外的列,分别是 EFFDTE 和 EXPDTE。我必须使用以下逻辑将数据从 TBTC03 合并到 TBTC03Y:

如果在 TC03Y 中找不到匹配的 TC03 条目
一个新的 TC03Y 记录是用 TC03 数据构建的
生效日期将默认为“01-01-1980”
到期日期将默认为“09-30-1995”

我写了一个相同的查询:

insert into  TBTC03Y (LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,EFFDTE,EXPDTE)
    select LOB,MAJPERIL,LOSSCAUSE,NUMERICCL,'0800101' ,'0950930'
     from TBTC03 where not EXISTS (select * from TBTC03Y where 
TBTC03Y.LOB =        TBTC03.LOB AND 
TBTC03Y.MAJPERIL   = TBTC03.MAJPERIL   AND
TBTC03Y.LOSSCAUSE  = TBTC03.LOSSCAUSE  AND
TBTC03Y.NUMERICCL  = TBTC03.NUMERICCL)

两个表的主键都是 LOB、MAJPERIL 和 LOSSCAUSE。

但是我有一些 TBTC03Y 记录,其中已经有带主键的数据。

触发上述查询会在某些行上提供主键约束。 我无法弄清楚如何完成它。

如果两个表的 PK 都是 {LOB, MAJPERIL, LOSSCAUSE},您应该从 where 子句中删除 TBTC03Y.NUMERICCL = TBTC03.NUMERICCL

示例:

t1{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL}
   1    1         1          1

t2{LOB, MAJPERIL, LOSSCAUSE, NUMERICCL}
   1    1         1          2

t2 中没有一行:

TBTC03Y.LOB =        TBTC03.LOB AND 
TBTC03Y.MAJPERIL   = TBTC03.MAJPERIL   AND
TBTC03Y.LOSSCAUSE  = TBTC03.LOSSCAUSE  AND
TBTC03Y.NUMERICCL  = TBTC03.NUMERICCL

但是插入会明显违反 t2 中的 PK 约束:

t2{LOB, MAJPERIL, LOSSCAUSE}
   1    1         1 

主键的问题在于您还在 WHERE 子句中包含了 NUMERICCL。如果删除它,您将插入唯一数据。

您可能必须创建一个单独的流程,因为您似乎在每个 table 中都有一些记录具有相同的 LOB、MAJPERIL 和 LOSSCAUSE 但具有不同的 NUMERICCL。我可以在这里想到三个选项;

  1. 您的数据有问题需要修复。
  2. 也许您想更新此值以匹配,在这种情况下您正在查看 UPDATE 而不是 INSERT INTO。
  3. 您需要更新复合主键以包含 NUMERICCL 列。
  4. 从 where 子句中删除 NUMERICCL 也会更正此问题。