2010-08-27 67 views
0

我有一个维度表是这样的:PK约束UPDATE

MY_TABLE

pk1 Primary key 
pk2 Primary key 
pk3 Primary key 
col1 
col2 
col3 
... 

和使用程序,以填补该表与合并到声明:

MERGE INTO my_Table dest 
USING 
    (SELECT <columns> 
     FROM <tables> 
    WHERE <conditions>) src 
ON 
    (dest.pk1 = src.pk1 AND dest.pk2 = src.pk2 AND pk3 = src.pk3) 
WHEN  MATCHED THEN UPDATE SET dest.col1 = src.col1 , 
           dest.col2 = src.col2 , 
           dest.col3 = src.col3 
WHEN NOT MATCHED THEN INSERT (pk1, pk2, pk3, col1, col2, col3) 
         VALUES (src.pk1, src.pk2, src.pk3, src.col1, src.col2, src.col3); 

我的问题是,查询'src“返回一些行有相同的主键,但他们没有重复的行,例如

| pk1 | pk2 | pk3 | col1 | col2  | col3 | 
-------------------------------------------------- 
| 100 | abc | x99 | 6000,00 | 01/01/2010 | 50,00 | 
| 100 | abc | x99 | 0,00 | 01/01/2010 | 30,00 | 
| 110 | rty | b50 | 345,00 | 08/10/2009 | 10,00 | 
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 12,50 | 
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 | 
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 | 
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 | 

所以,当我把我的程序返回的唯一约束违反错误

什么可能是这个问题的解决办法?顺便说一下即时查询src的不是作家......

,如果我需要修改src我应该有一个PK (100,ABC,X99)

| pk1 | pk2 | pk3 | col1 | col2  | col3 | 
--------------------------------------------------  
| 100 | abc | x99 | 6000,00 | 01/01/2010 | 80,00 | 

,为PK (120,XYZ,Y91)我将不得不:事先的任何建议

| pk1 | pk2 | pk3 | col1 | col2  | col3 | 
--------------------------------------------------  
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 12,50 | 

感谢。

+0

你想为pk 100,qbc,x99插入什么 - 考虑到我们可以尝试理清你如何得到那 – Mark 2010-08-27 11:39:20

+0

我编辑了我的问题,谢谢 – mcha 2010-08-27 12:10:22

回答

1

很明显,必须使用src才能使其返回唯一的主键。如果您不太关心表格中数据的质量,可以使用聚合并更改它,例如到

select pk1, pk2, pk3, max(col1), max(col2), sum(col3) 
    from ... 
    where ... 
    group by pk1, pk2, pk3 

但是很可能你需要更复杂的处理来使任何东西有任何意义。

编辑:首先改变summax,以反映问题

+0

这将是一个解决方案,但如果我不应该修改** src **? 终于我认为那是即将做 – mcha 2010-08-27 12:04:25

+1

技术上,你可以离开src不变,但将它换成另一个选择的声明;但在别的之前,你应该回答这个问题:处理这些重复行的正确方法是什么?选择后面的一个(根据col2)?按照我的建议做一个总结?同时忽略? – 2010-08-27 12:49:52

+0

在讨论了这个问题后,我应该忽略这两个问题,但我仍然无法弄清楚如何? – mcha 2010-08-30 11:45:30

0

编辑如果你真的确信没有主键冲突。请尝试检查col1,col2和col3是否没有任何唯一约束。也许唯一的约束违规不是来自主键字段。

介意与我们分享您的“错误信息”?