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