【问题标题】:SQL : Compare table data and update the correct value in tablesSQL:比较表数据并更新表中的正确值
【发布时间】:2017-04-07 14:20:11
【问题描述】:

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

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

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

这些参考键在下面的 2 个表中使用,

表 B:

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

表 C:

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

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

【问题讨论】:

  • 你能解释一下逻辑吗?到目前为止,我认为您希望将表 C 更新为表 A 和 B 的大多数 - 最后一句是什么意思?更多详细信息或示例会有所帮助
  • 嗨迈克尔,逻辑是这样工作的,当我在表 C 中插入一条记录时,它使用与表 A 不同的参考编号,而不是表 B 中使用的相同参考编号(例如,如果 xxxx 用于表 b 然后程序使用表 C 中的 YYYY 而不是 XXXX。我现在无法更改插入函数,因为活动订单被映射到两个参考号。因此,作为一种解决方法,我需要更新表 C 中的记录如果给定行在表 A 中具有超过 2 个参考编号,则在表 B (XXXX) 中使用相同的参考编号。
  • 你的意思是在表C中你想把YYYY改成XXXX?
  • Yes dan,如果表 A 中有 2 个条目,则表 C 中的值需要从 YYYY 更改为 XXXX
  • 我可以在 shell 中使用循环函数得到结果吗?,知道吗?

标签: sql db2


【解决方案1】:

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

您可能会根据您可能遇到的其他方面的限制来改变解决方案。这只是作为一个解决方案的想法。

【讨论】:

  • 感谢 michael 的 SQL 。现在我已经修改了表 B 和表 C 中的值以显示数据库中可用的数据。表 B 和 C 仅包含参考编号而不是实际产品编号,以通过参考表 B 和 C 执行直接更新。请您查看一下并告诉我如何更新表 C 中的参考键,就像表一样乙?
  • 所以没有办法检查表A中是否有两个数字(它们属于一起)并且您描述的逻辑不完整。
  • 我在下面的链接中添加了更多详细信息,stackoverflow.com/questions/43365754/… 请您看一下并告诉我如何在 db2 中使用游标获得预期结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
相关资源
最近更新 更多