将记录复制到表中并更新父记录ID关系

时间:2019-09-12 16:01:29

标签: postgresql

我需要复制具有父子关系的表中的记录。由于新记录将具有新记录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 

    )

0 个答案:

没有答案