技术问询:查询与多名不同对象育有子女的人员名单
查询与多名不同对象育有子女的人员名单
要解决这个问题,我们需要找出那些作为父亲或母亲,与至少两名不同伴侣共同生育子女的人员。下面是具体的思路和SQL实现方案:
核心思路
问题的关键在于统计每个人员(作为父/母身份)对应的不同伴侣数量:
- 从每条子女记录中,分别提取父亲与母亲的配对关系
- 对每个人员,统计其关联的不同伴侣数量,筛选出数量≥2的人员
SQL查询实现
假设你的数据表名为family_records,以下是通用的SQL语句:
WITH parent_partner_pairs AS ( -- 提取所有父亲对应的母亲伴侣 SELECT "Father ID" AS parent_id, "Mother ID" AS partner_id FROM family_records WHERE "Father ID" IS NOT NULL AND "Mother ID" IS NOT NULL UNION -- 提取所有母亲对应的父亲伴侣 SELECT "Mother ID" AS parent_id, "Father ID" AS partner_id FROM family_records WHERE "Father ID" IS NOT NULL AND "Mother ID" IS NOT NULL ), partner_count_summary AS ( SELECT parent_id, COUNT(DISTINCT partner_id) AS unique_partner_count FROM parent_partner_pairs GROUP BY parent_id HAVING COUNT(DISTINCT partner_id) >= 2 ) SELECT fr.ID, fr.NAME FROM family_records fr JOIN partner_count_summary pcs ON fr.ID = pcs.parent_id GROUP BY fr.ID, fr.NAME;
针对示例数据的验证
用你提供的示例数据运行这个查询:
- 第一步的
parent_partner_pairs会生成所有父-母、母-父的配对关系(自动去重重复配对) - 统计后会发现:
- ID为1的Paul,对应的伴侣是ID2(Debbie)和ID3(Jessie),共2名不同伴侣
- 其他人员的伴侣数量都为1
- 最终查询结果会返回Paul的ID和姓名,完全符合预期需求
补充说明
- 使用
UNION而非UNION ALL:避免父-母和母-父的重复配对被多次统计 COUNT(DISTINCT partner_id):确保统计的是不同的伴侣,而非子女数量- 过滤非空父母ID:排除那些本身没有父母记录的人员(比如示例中的Paul、Debbie等自身的记录)
内容的提问来源于stack exchange,提问作者T.Tolley
相关产品推荐
相关产品推荐

