Sql 使用JOIN的ibmdb2更新

Sql 使用JOIN的ibmdb2更新,sql,join,sql-update,db2,Sql,Join,Sql Update,Db2,我需要根据客户信息更新包含订单的表。这是我应该如何处理它的,但显然DB2不支持更新中的连接。我正在IBM iSeries上工作 UPDATE lib.orders as o JOIN lib.customers as c ON o.cstmrid = c.id SET o.updatehere = 'NEWVALUE' WHERE c.info = 'VALUE' 关于这个话题有很多现成的问题,但没有一个能真正帮助我 谢谢 好吧,现在真的很晚了,但如果有人读到这篇文章:没

我需要根据客户信息更新包含订单的表。这是我应该如何处理它的,但显然DB2不支持更新中的连接。我正在IBM iSeries上工作

UPDATE lib.orders as o
  JOIN lib.customers as c
  ON   o.cstmrid = c.id
SET    o.updatehere = 'NEWVALUE' 
WHERE  c.info = 'VALUE'
关于这个话题有很多现成的问题,但没有一个能真正帮助我


谢谢

好吧,现在真的很晚了,但如果有人读到这篇文章:没有一条评论/答案是正确的。重要的一点是,我正在开发一个iseries,它使用DB2UDB,既不支持更新时的连接,也不支持合并(至少是我们使用的版本)。
我认为唯一可行的方法是在WHERE EXISTS子句中加入一个

我建议如下:

UPDATE lib.orders
SET updatehere = 'NEWVALUE'
WHERE cstrmid in (
  SELECT id
  FROM lib.customers
  WHERE info = 'VALUE'
)
事实上,update语句有四个主要部分:

  • 正在更新哪个表?
    • 可能具有指定的别名
    • 你的例子用了一个
    • 我的建议不需要
  • 项目1中更新了哪些字段?
    • 可以是单个字段,如您的示例中所示
    • 可以是元组,包含多个字段
  • 项目2中填充了哪些值?
    • 可以是单个值或值的元组,具体取决于项2
    • 可以是子查询的结果
      • 必须根据需要返回单个值或元组以匹配项2
      • 可以针对项目1中指定的表进行联接,以确保为项目1表中的不同行输出不同的值
  • 第1项中的记录有哪些匹配条件?
    • 可以是一个或多个条件
    • 如果不指定此选项,DB/2将遍历表中的所有记录
    • 可以包含子查询
      • 如果在第3项中有一个子查询,并且与之匹配的行与该子查询的任何结果都不匹配,则将为第2项的字段分配空值
  • 我在建议的第1行指定了第1项

    我在建议的第2行指定了第2项和第3项

    我使用第3-7行中的子查询指定了第4项

    我有时会写更新声明,其中:

    • 第2项是多个字段的元组
    • 项3是返回多个值的子查询,与项1中指定的表连接
    • 项4使用的子查询与项3中使用的子查询类似,但返回的是联接值,而不是字段的更新值
    结果是DB/2使用项4作为标准,对项1进行查询,然后遍历结果行,根据项3返回的值更新项2中的字段。由于项3是子查询,针对项1中指定的表别名的联接为从子查询返回的内容提供了必要的条件

    我已经编写了update语句,其中所讨论的子查询是表值构造函数。通过这种方式,我能够根据一小部分已知值更新数百条记录


    我已经在iSeries上的DB/2上完成了所有这些。我从未使用过合并,因为正如您所注意到的,并不是所有版本的DB/2都支持合并。

    没有一个真正帮助您?或者是没有一个和你的完全一样,或者没有一个可以被复制和粘贴?请阅读此可能的副本