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

时间:2015-03-20 18:52:04

标签: 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)并使用从插入行中生成的主键更新quot表中的pol_id(来自上面的结果集)表1

table1有两列。 id和时间戳。

我正在使用db2 10.1。

我尝试了很多事情并且在很长一段时间内都没有成功。谢谢!

1 个答案:

答案 0 :(得分:0)

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

另外,您可以使用ROW_NUMBER() OLAP函数手动执行此操作,我经常发现这对于创建ID非常方便。为此,使用存储过程很方便,该过程执行以下操作:

  1. Table1获取最大旧ID,并将其写入变量old_max_id

  2. 生成结果集后,将行号写入table1,可能是类似

    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>)
    
  3. 将结果集写入表中或将游标返回给它。在这里,您应使用与上述相同的ROW_NUMBER语句,或直接使用Table1中的ID。