【问题标题】:I need help for an Update done in a specific way我需要帮助以特定方式完成更新
【发布时间】:2019-09-18 15:56:06
【问题描述】:

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

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

表格是这样设置的:

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

如您所见,表格有 3 列; 一个叫 domain,第二个叫 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 条记录,当然还有一些与示例表相同的域。

【问题讨论】:

  • 想要的结果真的很有帮助。
  • 您的表中是否已有domainsecond_name 值?在这种情况下,您只需要加入更新

标签: sql oracle plsql


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多