Sql 如何将生成的id插入结果表

Sql 如何将生成的id插入结果表,sql,db2,Sql,Db2,我有以下疑问 SELECT q.pol_id FROM quot q ,fgn_clm_hist fch WHERE q.quot_id = fch.quot_id UNION SELECT q.pol_id FROM tdb2wccu.quot q WHERE q.nr_prr_ls_yr_cov IS NOT NULL 对于该结果集中的每一行,我希望在另一个表中创建一个新行(称之为table1),并使用从table1中插入的行生成的主键更新QUOTE表中的pol_id(来自上述

我有以下疑问

SELECT q.pol_id
FROM quot q
    ,fgn_clm_hist fch
WHERE q.quot_id = fch.quot_id

UNION

SELECT q.pol_id
FROM tdb2wccu.quot q
WHERE q.nr_prr_ls_yr_cov IS NOT NULL
对于该结果集中的每一行,我希望在另一个表中创建一个新行(称之为table1),并使用从table1中插入的行生成的主键更新QUOTE表中的pol_id(来自上述结果集)

表1有两列。id和时间戳

我正在使用DB210.1


我尝试过很多事情,但都失败了很长一段时间。谢谢

简单解决方案:为查询结果集创建一个新表,其中包含一个。然后,在运行查询后,使用结果表中新生成的id更新
pol_id
字段

或者,您可以通过使用
ROW\u NUMBER()
OLAP函数更手动地执行此操作,我经常发现创建id很方便。为此,可以方便地使用执行以下操作的存储过程:

  • 表1
    中获取最大旧id,并将其写入变量
    old\u max\u id

  • 生成结果集后,将行号写入
    表1
    ,可能是这样

    INSERT INTO TABLE1
    SELECT ROW_NUMBER() OVER (PARTITION BY <primary-key> ORDER BY <whatever-you-want>)
            + OLD_MAX_ID
         , CURRENT TIMESTAMP
    FROM (<here comes your SQL query>)
    
    插入到表1中
    在(按顺序划分)上选择行号()
    +旧身份证
    ,当前时间戳
    从()
    
  • 要么将结果集写入表中,要么将光标返回到表中。在这里,您应该使用与上面相同的
    行号
    语句,或者直接使用
    表1中的ID


  • 您是否计划将
    表1
    用于其他用途,还是只需要为pol_ID生成递增的ID值?DB210.0只存在于z/OS上;你用的就是这个吗?是的。我计划用表1做其他事情。我们在linux上使用DB2V10.1。谢谢。也许你可以向我们展示一些你尝试过的很多东西,以及为什么它们不适合你?那将有助于我们帮助你。一个潜在的问题是,查询中的
    UNION
    消除了重复项,因此生成的id可能少于需要更新的
    pol_id
    值。那你想做什么?