SQL:比较表数据并更新表中的正确值

SQL:比较表数据并更新表中的正确值,sql,db2,Sql,Db2,我有以下几个表中的数据差异,需要使用sql中的更新查询进行更正 主表(take table A)表包含相同产品的2个主键值,如下所示: ------------------ PRRFNBR|PRNBR -------|-------- XXXX |123 YYYY |123 ---------------- 这些参考键在下面的两个表中使用 表B: ---------------------- SUPRFNBR |SUSPRNBR --------------------- XXXX

我有以下几个表中的数据差异,需要使用sql中的更新查询进行更正

主表(take table A)表包含相同产品的2个主键值,如下所示:

------------------
PRRFNBR|PRNBR
-------|--------
XXXX   |123
YYYY   |123
----------------
这些参考键在下面的两个表中使用

表B:

----------------------
SUPRFNBR |SUSPRNBR
---------------------
XXXX     |   234
-------------------
表C:

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

现在,我需要比较所有这3个表,并使用表B中可用的参考键(SUPRFNBR)更新表C中的SEPRFNBR(例如,如果相同的PRNBR在表A中有2个主键值,则需要更新表C中的参考键XXXX)

据了解,您的逻辑不需要参考表a,因为不同的SUPRFNBR和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)"

根据可能存在的其他侧面约束,可以改变解决方案。这只是一个解决方案。

请您再解释一下逻辑。到目前为止,我认为您希望将表C更新为表A和表B的大部分-您最后一句话的意思是什么?更多的细节或例子会有帮助,Hi Michael,逻辑是这样工作的,当我在表C中插入一条记录时,它使用了与表a不同的参考号,而不是表B中使用的相同参考号(如表b中使用xxxx,则程序使用表C中的YYYY而不是xxxx。我现在无法更改插入函数,因为活动订单映射到两个参考号。因此,作为一种解决方法,我需要使用表b(xxxx)中使用的相同参考号更新表C中的记录。)如果给定行具有表A中2个以上的参考号)。您的意思是,在表C中您想将YYYY更改为XXXX吗?是的,dan,如果表A中的行有2个条目,则表C中的值需要从YYYY更改为XXXX。我可以使用shell中的循环函数获得结果吗?有什么想法吗?感谢michael的SQL。现在,我修改了表B和表C中的值,以显示dat中可用的数据abase.表B&C仅包含参考编号,而不是实际的产品编号,以便通过参考表B&C执行直接更新。请您查看一下,让我知道如何像表B一样更新表C中的参考键?因此无法检查是否有两个编号(哪些编号属于同一个编号)在表A中,您描述的逻辑是不完整的。我在下面的链接中添加了更多详细信息,请您查看一下,让我知道如何在db2中使用游标获得预期的结果?