SQL查询更新1000条记录

Posted

技术标签:

【中文标题】SQL查询更新1000条记录【英文标题】:SQL query to update 1000 records 【发布时间】:2020-02-06 11:38:15 【问题描述】:

我创建了 1000 条 ID 作为序列 ID 的记录。现在,我有 1000 个唯一代码的列表,我需要将其分配给每条记录。

像这样:

我正在寻找使用 SQL 脚本实现它的建议。

【问题讨论】:

重新开始,同时插入唯一代码和ID。 @jarlh 此时,我无法访问代码。感谢您的快速回复。 如果您无法访问代码,那么您将如何分配它们? 除了@grootygroot 提出的问题(他打败了我),即使您可以访问代码,您如何确定哪个代码分配给哪个id? @a_horse_with_no_name 代码将提供给另一个团队,我必须提供更新脚本让他们更新代码 【参考方案1】:

您可以使用MERGE 声明:

MERGE INTO destination_table dst
USING (
  SELECT ROWNUM rn,
         value
  FROM   your_codes_table
) src
ON ( src.rn = dst.id )
WHEN MATCHED THEN
  UPDATE SET code = src.value
WHEN NOT MATCHED THEN
  INSERT ( id, code ) VALUES ( destination_table__id__seq.NEXTVAL, src.value );

但是,这将增加更新和插入的每一行的序列,这可能不是您想要的。

最简单的方法是从目标表中删除现有行(无代码)并删除您基于 id 值的序列,然后重新创建序列(将序列重置回其起始值) :

DELETE FROM destination_table;
DROP SEQUENCE destination_table__id__seq;
CREATE SEQUENCE destination_table__id__seq;

并插入行:

INSERT INTO destination_table ( id, code )
SELECT destination_table__id__seq.NEXTVAL,
       value
FROM   your_codes_table

db<>fiddle

【讨论】:

【参考方案2】:

你只想要row_number()吗?

select code, row_number() over (order by code) as id
from t;

【讨论】:

以上是关于SQL查询更新1000条记录的主要内容,如果未能解决你的问题,请参考以下文章

oracle 我有1000条查询语句,通过执行每一条sql语句,返回所有的查询结果为空的记录,能实现吗?

sql语句查询如何显示第一条数据

如何使用 C#/SQL 批量更新 1000 条记录

sql查询 如何获取查找某ID的一条记录在表中是第几条记录

“sql”语句中“in”怎么用?

用sql怎么更新指定数量的记录?