首页 > 解决方案 > 我需要帮助以特定方式完成更新

问题描述

我将尽可能多地描述我的问题。它有点难以解释,但我会尝试。

基本上我在一个名为 MDM 的 Oracle 框架上工作,我无法更改逻辑或表设计。幸运的是,我使用的表格是自定义的,所以它不在框架下。

表是这样设置的:

|DOMAIN|SECOND_NAME|SOME_VALUES|
|   X  |     XX    |28309128312|
|   X  |     XX    |11121309011|
|   Y  |     YY    |55583202300|
|   Z  |     ZZ    |00000912323|

如您所见,该表有 3 列;第一个称为域,第二个称为 second_name,第三个称为 some_values。

这个表的逻辑是:对于每个域,域可以租用的每个值都有很多次出现。

因此,如果我有域 X,我可以在我的表中找到许多不同的记录,这些记录将具有不同的值但相同的域。

真正的问题是:

对于每个域,都关联一个 second_name,例如别名。别名不会根据 SOME_VALUES 更改,如果记录的域 = x,则第二个名称将为 XX。

我在 Excel 工作表上有一个 second_name 值列表,我必须用它更新列 SECOND_NAME。

是否可以编写一个更新脚本,对于每个名为 X 的域,我将写入 second_name xx,对于每个名为 Y 的域,我将写入 second_name YY 等等。

我有 109 个域,当然还有 109 个 second_name,但在表中有类似 20.000 条记录,当然还有一些与示例表相同的域。

标签: sqloracleplsql

解决方案


假设您在名为 的数据库表中拥有 Excel 文件的内容my_mapping,其中包含列domainsecond_name,您可以执行这个简单UPDATE的语句,该语句使用相关的子查询来恢复相关的second_name

UPDATE mytable t SET second_name = (
    SELECT m.second_name
    FROM my_mapping m
    WHERE m.domain = t.domain
);

映射表中两列的组合应该是唯一的。


推荐阅读