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

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

像这样:

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

【问题讨论】:

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

标签: sql oracle sql-update


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2021-11-21
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多