postgresql - 将记录复制到表中并更新父记录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
)
解决方案
推荐阅读
- c# - Xamarin ProgressBar 不显示动画
- chisel - 如何覆盖/扩展凿子信号命名
- javascript - 是否可以在 R 中为 DataTable 搜索栏创建 onfocus 功能
- selenium - Selenium/Katalon 在 jenkins 或 headless 中运行时无法获取 webelement 的文本
- java - 我如何显示在 AsyncTask 的 doInBackground 中运行的 BufferReader 中存在的数据
- eclipse - 在 ocl 集合中获取元素索引?[ocl_Eclipse]
- c# - 套接字使用。数据没有第二次发送
- java - 我们如何在同一个 Spring 应用程序中同时添加 JWT 和基本身份验证?
- php - 错误 Laravel 5.8 Eloquent - 试图获取非对象的属性“名称”
- layout - 编号标题具有自动标题,无法在样式内进行相应格式化