2017-04-07 130 views
0

我有几个其中需要的表的下面数据差异的正确值,以使用更新的查询在SQLSQL:比较表数据,并更新表

主表(以表A)表包含来校正对于相同的产品如低于2主键值,

------------------ 
PRRFNBR|PRNBR 
-------|-------- 
XXXX |123 
YYYY |123 
---------------- 

而在2个表像下面使用这些参考键,

表B:

---------------------- 
SUPRFNBR |SUSPRNBR 
--------------------- 
XXXX  | 234 
------------------- 

表C:

------------------- 
SEPRFNBR | SESUPRNBR 
------------------- 
YYYY  | 435 
-------------------- 

现在我需要比较所有这3个表,并在表B(SUPRFNBR)可参照键表C更新SEPRFNBR(如参考关键XXXX必须更新在表C中,如果相同的PRNBR是具有表A 2个主键值)

+0

你能否多解释一下逻辑?到目前为止,我认为你希望表C更新为表A和表B的大部分 - 你对最后一句话意味着什么?更多的细节或例子将有所帮助 – MichaelTiefenbacher

+0

嗨迈克尔,逻辑工作是这样的,当我在表C中插入一条记录时,它使用来自表A的不同参考号而不是表B中使用的相同参考号(例如,如果使用xxxx表b然后该程序使用表C中的YYYY而不是XXXX我现在无法更改插入函数,因为活动订单被映射到两个参考数字,因此作为一种解决方法,我需要更新表C中的记录如果给定的行在表A中具有多于2个参考号),则在表B(XXXX)中使用相同的参考号。 –

+0

你的意思是说在表C中你想把YYYY改成XXXX吗? – 2017-04-10 08:59:49

回答

0

你的逻辑 - 只要理解 - 不需要如不同SUPRFNBR &表A的参考SEPRFNBR有资格获得更新

update c set SEPRFNBR = (select SUPRFNBR from b where b.SUPRNBR = c.SEPRNBR) 

如果出于某种(未描述的)原因的查找表A是必要,可以延长所以像

update c set SEPRFNBR = (select SUPRFNBR from b 
          where b.SUPRNBR = c.SEPRNBR) 
          and (select count(*) from a 
            where b.SUPRNBR = a.PRNBR) > 1)" 

您可以根据您可能有其他方面的限制有所不同的解决方案。这只是一个解决方案的想法。

+0

感谢Michael的SQL。现在我修改了表B和表C中的值以显示数据库中可用的数据。表B和C只包含参考数字,而不包括参考表B和C来执行直接更新的实际产品编号。请您仔细查看它并让我知道如何更新表C中的参考键,如同TABLE B? –

+0

因此,无法检查表A中是否有两个数字(它们属于一起),并且描述的逻辑不完整。 – MichaelTiefenbacher

+0

我在下面的链接中添加了更多详细信息,请使用http://stackoverflow.com/questions/43365754/compare-rows-using-a-cursor-in-db2-and-perform-update查看它并让我知道如何使用db2中的游标来获得预期的结果? –