gpt4 book ai didi

SQL - 有条件地拆分容器行

转载 作者:行者123 更新时间:2023-12-04 08:24:16 24 4
gpt4 key购买 nike

在迁移容器的过程中,如果我们有两张表;

  • TABLE_MAPPING (old_value, new_value)
  • TABLE_USING (value, data...)
  • TABLE_USING正在引用 (FK) 无关表中的容器。 TABLE_MAPPING临时用于迁移,目标是将内容从已弃用的容器移动到新容器。
    这里的问题是,有时不仅容器被替换,而是拆分成多个新容器,例如 TABLE_MAPPING可能包含:


    OLD_VALUE
    新值(value)


    1
    10

    1
    11

    2
    20


    并且查询将导致“更新”值为“1”的一行到“10”和“11”的两行。
    有没有简单的 SQL 方法来做到这一点?还是应该使用 PL/SQL?
    编辑:根据要求,这里是使用 TABLE_MAPPING 之前/之后的示例以上
    之前:


    值(value)
    IRRELEVANT_COLUMNS ...


    1
    ...

    2
    ...


    之后:


    值(value)
    IRRELEVANT_COLUMNS ...


    10
    ...

    12
    ...

    20
    ...

    最佳答案

    你需要两个步骤。下面我首先插入所有新行,然后删除所有旧行。

    -- insert rows with new values
    insert into table_using (value, data ...)
    select m.new_value, u.data ...
    from table_using u
    join table_mapping m on m.old_value = u.value;

    -- delete rows with old values
    delete from table_using where value in (select old_value from table_mapping);

    -- commit the transaction
    commit;

    关于SQL - 有条件地拆分容器行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65344112/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com