gpt4 book ai didi

sql - Oracle insert select max + 1 到同一张表

转载 作者:搜寻专家 更新时间:2023-10-30 22:08:25 25 4
gpt4 key购买 nike

我认为这很容易,但我无法理解这个问题。我想避免使用 pl/sql,最好是用纯 sql 来完成。所以在下面的 sql 中,我试图通过从另一个表 employee_agreement 中选择来插入到 agreement_tbl 中。员工协议(protocol)表返回大约 6000 行。因此,对于每一行,我想要插入的是唯一的 max(agreement_nbr) + 1 插入到 AGREEMENT_NBR 列中。

问题是,由于 sql 首先执行,max(agreement_nbr) 总是相同的,比如 5000,当我尝试插入 max(agreement_nbr) 时它抛出“唯一约束异常”,因为它试图插入值 5000所有 6000 个 Blade 。如何从选择查询中获取每行的唯一 max+1?这可能就像从同一张表中插入和选择一样。任何帮助表示赞赏。谢谢

编辑:这是一次性脚本,并且 agreement_tbl 已经填充了数千条记录。

INSERT
INTO
Agreement_tbl
(
AGREEMENT_NBR,
Employee_id,
AGREEMENT_TEXT
)
select
(select max(AGREEMENT_NBR)+1 from Agreement_tbl) as AGREEMENT_NBR,
a.Employee_id ,
a.AGREEMENT_TEXT
from employee_agreement
-- some where conditions

最佳答案

使用 rownum 而不是 +1
第一行 Rownum 为 1,第二行为 2,依此类推:

INSERT
INTO
Agreement_tbl
.......
select
rownum + (select max(AGREEMENT_NBR) from Agreement_tbl) as AGREEMENT_NBR,
a.Employee_id ,
a.AGREEMENT_TEXT
from employee_agreement
-- some where conditions

关于sql - Oracle insert select max + 1 到同一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com