如何从含LinkedID的人员表中查询并合并关联人员为单条记录?
当然可以实现这个需求!
你的问题本质是要把双向关联(LinkedID互相指向)的人员记录归为同一组,并且每组只保留一条记录(比如示例里保留ID更小的那条)。针对这种一对一双向关联的场景,我们可以用简单的自连接查询来实现:
SELECT t1.* FROM your_table t1 LEFT JOIN your_table t2 ON t1.LinkedID = t2.ID WHERE -- 没有关联关系的记录直接保留 t1.LinkedID IS NULL -- 对于有双向关联的组,只保留ID更小的那条记录 OR t1.ID < t2.ID;
逻辑解释:
- 左连接
t2表是为了找到当前记录t1对应的关联记录; - 条件
t1.LinkedID IS NULL会直接保留像Mary Sue这种没有任何关联的人员; - 条件
t1.ID < t2.ID会在互为关联的记录中(比如John和Jane,Joe和Janet),只保留ID更小的那条,这样就实现了“把相互关联的视为同一个个体”的需求,最终得到你想要的结果集。
如果你的场景中存在更复杂的关联链(比如A关联B,B关联C这种链式关联),那可能需要用递归CTE来找出每个记录的根节点,但从你给出的示例来看,上面的SQL已经完全满足需求啦。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

