【问题标题】:How to insert generated id into a results table如何将生成的 id 插入结果表
【发布时间】:2015-03-20 18:52:03
【问题描述】:

我有以下问题

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。

我尝试了很多东西,但很长一段时间都没有成功。谢谢!

【问题讨论】:

  • 您打算将table1 用于其他用途,还是只需要为 pol_id 生成递增的 ID 值? DB2 10.0 仅存在于 z/OS 上;这是你用的吗?
  • 是的。我打算将 table1 用于其他事情。我们在 linux 上使用 db2 v10.1。谢谢。
  • 也许您可以向我们展示您尝试过的众多方法中的一些以及为什么它们对您不起作用?这将有助于我们帮助您。一个潜在的问题是查询中的UNION 消除了重复项,因此您最终生成的ID 可能少于需要更新的pol_id 值。那你想做什么?

标签: sql db2


【解决方案1】:

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

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

  1. Table1获取最大old 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。

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多