如何修改SQL查询从onboarding_tasks表取id生成合法task_id
第二段SQL修改方案
你可以直接在INSERT的SELECT语句中查询onboarding_tasks表的id字段作为合法的task_id值,无需手动生成固定序列,以下是两种常用场景的实现代码:
场景1:每个已存在的入职任务生成固定数量的关联子任务
(示例中每个任务生成2条task_item,总数量50条和你原脚本生成数量对齐)
INSERT into onboarding_task_item (title, task_id, onboarding_tasks) SELECT left(md5(random()::text), 10) AS title, ot.id AS task_id, ot.id AS onboarding_tasks -- 若该字段含义不是关联任务id,可按需调整赋值逻辑 FROM onboarding_tasks ot CROSS JOIN generate_series(1,2) AS g(id);
场景2:子任务随机关联已有任务id,不要求每个任务都有子项
INSERT into onboarding_task_item (title, task_id, onboarding_tasks) SELECT left(md5(random()::text), 10) AS title, (SELECT id FROM onboarding_tasks ORDER BY random() LIMIT 1) AS task_id, (SELECT id FROM onboarding_tasks ORDER BY random() LIMIT 1) AS onboarding_tasks FROM generate_series(1,50) as g(id);
以上两种写法生成的task_id都是onboarding_tasks表中实际存在的合法值,不会触发外键约束报错,执行完不需要手动修改字段内容。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

