首页 > 解决方案 > 将记录复制到表中并更新父记录id关系

问题描述

我需要复制具有父子关系的表中的记录。由于新记录将具有新的记录 ID,因此需要保留和更新父/子关系以反映新记录 ID(主键)。

可以说我有下表:

asset_id   parent_asset_id
    1        NULL
    5         1
    23        1
    25        23

当我将记录复制到表中时,它们看起来像这样:

asset_id   parent_asset_id
    42        NULL
    43        1
    44        1
    45        23

我需要新的资产与父关系如下:

asset_id   parent_asset_id
    42        NULL
    43        42
    44        42
    45        44

我正在尝试使用 CTE(但也许这不是最好的方法)。我用新记录更新当前asset.asset表,然后想更新父子关系,但不知道如何连接表以使关系正确。

parent_asset_id是需要具有正确关系的列,所有其他字段保持不变。

CREATE FUNCTION asset.copy_asset_store(
    IN _username VARCHAR(100),
    IN _src_asset_store_id VARCHAR,
    IN _dest_asset_store_id VARCHAR
)

DECLARE
    v_user_id INT;

 BEGIN

    WITH copy_into_study AS(
    UPDATE
        asset.asset
    SET
        origin_asset_id = original.origin_asset_id,
        asset_type_id = original.asset_type_id,
        asset_store_id = _dest_asset_store_id,
        parent_asset_id = original.parent_asset_id
        asset_name = original.asset_name,
        asset_desc = original.asset_desc,
        is_signature_required = original.is_signature_required,
        s3_bucket_id = original.s3_bucket_id,
        color_id = original.color_id,
        asset_expiration = original.asset_expiration,
        is_deleted = original.is_deleted,
        rec_created_by_user_id = v_user_id,
        rec_updated_by_user_id = v_user_id
    FROM
        asset.asset AS original
    WHERE
        original.asset_store_id = _src_asset_store_id::INT
    RETURNING *
    ),update_parent AS (
        UPDATE
            asset.asset
        SET
            parent_asset_id = copy_into_study.parent_asset_id
        FROM 
            copy_into_study
        WHERE 

    )

标签: postgresql

解决方案


推荐阅读