【问题标题】:I want to update records of 2 tables in Database based on matching Key我想根据匹配键更新数据库中 2 个表的记录
【发布时间】:2020-10-26 12:43:03
【问题描述】:

我有 2 个表,源和目标如下,

来源

Key | Source_ID | Target_ID | Source_Data
-----------------------------------------
1     s1          null        some_source_data
2     s2          null        some_source_data

目标

Key | Source_ID | Target_ID | Target_Data
-------------------------------------------
1     null        t1          some_target_data
2     null        t2          some_target_data

最初源表有现有记录,并新插入记录到目标表 现在我的要求是根据键匹配更新目标表中的 Target_ID 和源表中的 Source_ID 的记录,到目前为止,我正在 java 上执行此操作,方法是使用键列连接这两个表并将结果保存在结果集中并执行一张一张地更新表,在数据量较少的情况下工作得很好,但在数据量很大的情况下,Java执行需要大量时间,每个表上的200000条记录需要2个小时才能完成操作,现在我希望它从 Java 中移出并仅像触发器或 PL/SQL 一样在 SQL 中执行,在目标表中插入记录时,这些触发器或脚本应该自动运行并完成正在做 java 的工作,需要你的帮助/关于如何实现的建议,我正在使用 DB2 数据库

【问题讨论】:

    标签: java sql plsql triggers db2


    【解决方案1】:

    这听起来很简单join:

    select s.key, s.source_id, t.target_id, s.source_data, t.target_data
    from source s join
         target t
         on s.key = t.key;
    

    如果您希望这个按需可用,您可以将此逻辑包装在一个视图中。为了提高性能,您可以在每个表的 key 列上添加索引。您也可以创建一个物化视图,但索引似乎有点过头了。

    【讨论】:

    • 嗨 Gordon,感谢您的评论,但我希望您没有正确阅读我的问题,我想根据 Key 更新源表和目标表数据,目前我正在使用 join 来执行此操作在 Java 中操作,但我想在 SQL 中使用一些触发器或 PL/SQL
    • @RAJUGORAI 。 . .何必? join 很简单,应该有很好的性能。此外,“java”不会更新数据库中的表。 UPDATE 语句(或 MERGE)进行更新。
    • 更新所有记录是我的要求,我提到的表只是一个示例,这些是巨大的表,在 Java 中我只使用 UPDATE Query 更新记录,它需要很多时间记录超过十万,因此一旦在目标表中插入新记录,就必须编写一个触发器来更新两个表中的所有记录
    • @rajugorai.. 你为什么坚持触发?如果我理解你的话,你的第一个要求很清楚,就是从某个地方传递密钥,然后匹配两个表,但你到底要更新什么?
    【解决方案2】:

    所以你需要做的是在你的 source_Table 上创建一个触发器来更新你的 target_table 中的 target_id。

    这应该可以解决问题:

    CREATE TRIGGER update_targettable
    AFTER UPDATE ON source_table
    FOR EACH ROW 
    BEGIN
    UPDATE target_table SET target_id = :NEW.source_id WHERE key = :NEW.key
    END;
    

    假设您对源表进行了更新。

    UPDATE SOURCE_TABLE SET SOURCE_ID = s1 where key = 1;
    

    这会自动将您的 target_table.target_id 设置为与键匹配的 source_table.source_id 中的值相同。

    我希望这是您所需要的。否则,请说明您的问题。

    我推荐reading

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2015-09-20
      • 2013-01-20
      相关资源
      最近更新 更多