我正在构建一个测试数据集,将不同的人与家人联系起来,所有个人都有一个唯一的ID,每个家庭(有多个人)都有一个唯一的ID。
我创建了2个表,每个表都包含具有唯一“peopleID”值的人员。第一个表具有唯一的“familyID”值。所以:
第一个表(“people1”)如下所示:
person_ID | family_ID | first_name | last_name | date_of_birth |解决的
1 | 1 |约翰|史密斯| 01-01-1901 | 123 Anywhere St
2 | 2 |简|琼斯| 03-01-1982 | 312 Anyplace Ave
6 | 3 |哈罗德|维京人| 06-30-1973 | 283 Northman Rd
的
第二个表(people2)看起来像这样:
person_ID | family_ID | first_name | last_name | date_of_birth |解决
的
3 | NULL |理查德|霍金斯| 04-20-2003 | NULL
4 | NULL |朱丽叶|乔丹| 03-02-2005 | NULL
的
我想将people2中的行添加到people1,每个行都有一个来自people1的RANDOM familyID,因此最终结果如下所示:
person_ID | family_ID | first_name | last_name | date_of_birth |解决的
1 | 1 |约翰|史密斯| 01-01-1901 | 123 Anywhere St
2 | 2 |简|琼斯| 03-01-1982 | 312 Anyplace Ave
6 | 3 |哈罗德|维京人| 06-30-1973 | 283 Northman Rd
3 | 2 |理查德|霍金斯| 04-20-2003 | NULL
4 | 3 |朱丽叶|乔丹| 03-02-2005 | NULL
的
我想到的一种方法是从第二个表构建一个引用表,如下所示:
SELECT person_ID,
(select family_ID from people1 ORDER BY RANDOM() LIMIT 1) as family_ID
from people2;
但是,对于“people2”中的每一行,它会从“people1”返回一个随机条目。我怎么能强迫它为每一行返回一个不同的随机值?一个游标迭代“people2”中的每一行,并从“people1”中选择一个不同的familyID值?怎么会写?
答案 0 :(得分:0)
用于生成范围内任何随机整数的SQL Server公式为:
SELECT FLOOR(RAND()*(b-a)+a)
其中 a 最小, b 是该范围内的最大数字。
(但是,我相信RANDOM()可能是Postgresql的函数,而不是RAND())
因此,如果您的people1.family_ID列是INT列,并且该范围内没有缺失值(您提供的示例有效,因为它有1,2,3),您可以尝试替换 a MIN(family_ID)
和 b MAX(family_ID)
答案 1 :(得分:0)
family_id
相关联:
create temporary table family_id_no( no serial primary key, family_id int); insert into family_id_no(family_id) select distinct family_id from people1;
family_id
来关联随机no
:
select person_id, family_id_no.family_id, first_name, last_name, date_of_birth, address from people2 left join family_id_no using no=trunc(random()*(select max(no) from family_id_no))+1;
未测试