PostgreSQL如何为onboarding_tasks每行生成4条关联onboarding_task_item测试数据
修改方法
你只需将generate_series从SELECT字段列表移动到FROM子句做交叉连接,序列范围设置为1~4即可,修改后的SQL如下:
INSERT into onboarding_task_item (title, task_id, onboarding_tasks) SELECT left (md5(random()::text), 10) AS title, ot.id, g.id AS onboarding_tasks FROM onboarding_tasks ot CROSS JOIN generate_series(1,4) AS g(id);
原理说明
- 原写法将
generate_series放在SELECT字段中,只会为每行onboarding_tasks数据返回单个序列值,不会扩展行数,所以只能生成1条关联的子表数据。 - 把
generate_series放在FROM子句做交叉连接后,会将onboarding_tasks的每一行和生成的4行序列做笛卡尔积匹配,自动为每条任务生成4条对应的子表数据,刚好满足需求。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

