PostgreSQL如何从Student、University实体表随机填充Applies关联表
实现方案
你可以通过笛卡尔积生成所有学生和大学的配对组合,再用random()筛选10%左右的结果直接插入即可,不同的主键生成场景对应两种写法:
场景1:application_ID为自增主键(serial/IDENTITY类型)
不需要手动指定主键值,直接插入外键字段即可:
INSERT INTO Applies (student_ID, University_Name) SELECT s.Student_ID, u.University_Name FROM Student s CROSS JOIN University u WHERE random() < 0.1;
场景2:application_ID需要手动生成
用窗口函数row_number()生成连续主键值:
INSERT INTO Applies (application_ID, student_ID, University_Name) SELECT row_number() OVER () AS application_ID, s.Student_ID, u.University_Name FROM Student s CROSS JOIN University u WHERE random() < 0.1;
说明
CROSS JOIN会生成两个表的全量配对结果,也就是所有可能的申请关联,200个学生+200个大学的组合总量为40000条,筛选10%后约为4000条数据,random()的比例误差非常小- 插入前可以先把
INSERT语句替换为SELECT COUNT(*)执行,核对行数符合预期后再执行插入操作 - 数据库的外键约束会自动校验
student_ID和University_Name的合法性,不需要额外加判断逻辑
内容的提问来源于stack exchange,提问作者priceless32
相关产品推荐
相关产品推荐

