You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为亲子关系表添加家庭编号

为亲子关系表添加家庭编号的解决方案

嘿,我来帮你搞定这个家庭编号的问题!核心思路很清晰:每个家族的根节点(就是level=1、父亲为空的成员)对应唯一的家庭编号,所有后代直接继承这个编号——毕竟你已经用数字ID代替姓名,完全不用担心同名混淆的问题。

具体操作步骤

1. 给根节点分配初始家庭编号

首先处理所有level=1且father=NA的成员,给他们分配独一无二的家庭编号,比如从F1、F2开始:

  • 假设Guillou Arthur的数字ID是1,家庭编号设为F1
  • 假设Cleach Marc的数字ID是2,家庭编号设为F2

2. 让后代继承家庭编号

对于所有非根节点(level>1),只需要找到他们父亲对应的家庭编号,直接复用就行。举几个例子:

  • Guillou Eric(ID3)的父亲是ID1,所以家庭编号跟着用F1
  • Cleach Franck(ID4)的父亲是ID2,家庭编号就是F2
  • Cleach Herbet(ID7)的父亲是Cleach Leo(ID6),而ID6的家庭编号是F2,所以ID7也用F2

处理后的最终数据示例(用数字ID展示)

person_idfather_idlevelfamily_id
1NA1F1
2NA1F2
312F1
412F1
522F2
622F2
763F2
874F2
933F1

批量实现的SQL示例

如果用SQL来自动化处理,这两步就能搞定:

  1. 先给根节点赋值家庭编号:
UPDATE family_relations
SET family_id = CONCAT('F', person_id)
WHERE level = 1 AND father IS NULL;
  1. 用递归CTE更新所有后代的家庭编号:
WITH RECURSIVE family_tree AS (
    SELECT person_id, father_id, family_id
    FROM family_relations
    WHERE level = 1 AND father IS NULL
    UNION ALL
    SELECT fr.person_id, fr.father_id, ft.family_id
    FROM family_relations fr
    JOIN family_tree ft ON fr.father_id = ft.person_id
)
UPDATE family_relations fr
SET family_id = ft.family_id
FROM family_tree ft
WHERE fr.person_id = ft.person_id;

不管你的家族树有多少层,这个递归方法都能轻松遍历所有成员,准确分配家庭编号。

内容的提问来源于stack exchange,提问作者Wilcar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:00:57