基于 SQL 的关系型数据库管理系统仅部分适用于层次结构或递归查询。其他系统,例如ArangoDB,在这方面表现更佳(在2016 年 GOTO 大会上曾有一场精彩的演讲专门讨论过这个问题)。然而,也可以使用公共表表达式 (CTE)在 SQL 中创建递归查询,例如,允许您查询经典的父子表的所有祖先和后代。
在PostgreSQL中,例如:
0672c4761d202a35a9059fa137ace7c3
如果要获取某个item_id的所有子代,请使用通用表表达式:
0672c4761d202a35a9059fa137ace7c3
询问父母也没问题:
0672c4761d202a35a9059fa137ace7c3