如何使用单个UPDATE语句更新两个不同的表

时间:2016-11-04 11:58:14

标签: sql db2

我正在尝试使用像这样的单个语句更新两个表

db2 update catentry, catentdesc 
set catentry.buyable=0,
    catentdesc.published=0 
where catentry.catentry_id=catentdesc.catentry_id 
  and catentry.partnumber='some value'

但收到错误

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

将DB2 CLP设置为autocommit OFF并使用;命令终止符:

db2 +c -t 
update catentry   set buyable=0   where partnumber='some value';
update catentdesc set published=0 where catentry_id IN 
(SELECT catentry_id FROM catentry where partnumber='some value');
commit;

答案 1 :(得分:0)

不确定为什么要在单个语句中执行此操作,但最新版本的DB2 for LUW(以及有一些限制,DB2 for z / OS)支持所谓的数据更改表引用允许像

这样的技巧
WITH t1 (catentry_id) AS (
   SELECT catentry_id FROM FINAL TABLE (
      UPDATE catentry SET buyable = 0 WHERE partnumber = 'some value'
   )
), t2 (catentry_id) AS (
   SELECT catentry_id FROM FINAL TABLE (
      UPDATE catentdesc SET published = 0 WHERE catentry_id = (
         SELECT catentry_id FROM t1
      )
   )
) SELECT 1 FROM sysibm.sysdummy1

请注意,实际语句必须是某个SELECT,而UPDATE语句也包含在它们自己的SELECT中,但这是作为单个语句执行的。