我正在维护一个项目表( Id 是主键)。某些项目具有父项(也是项,列 Parent 包含父项的ID,该ID也位于同一表中。某些项没有父级,因此该值设置为null。
是否有任何方法或适当的设计模式来维护此类信息。 (例如:外键也来自同一张表)
如果给出了一个项目的ID,则推荐的写query
循环方式是直到项目的父项为null。
例如:给定值为 5 ,查询应返回 2 。
5 的父母是 4 , 4 的父母是 3 , 3 < / strong>为 2 , 2 的父级为空
|---------------------|------------------|
| Id | Parent |
|---------------------|------------------|
| 1 | 4 |
|---------------------|------------------|
| 2 | null |
|---------------------|------------------|
| 3 | 2 |
|---------------------|------------------|
| 4 | 3 |
|---------------------|------------------|
| 5 | 4 |
|---------------------|------------------|
| 6 | null |
我正在使用PostgreSQL数据库,但我相信解决方案是 通用,可能支持SQL Server,MySQL,SQLite或Oracle
答案 0 :(得分:1)
您使用递归查询查询层次表:
with cte(id, parent) as
(
select id, parent from mytable where id = :id -- <== the starting ID here
union all
select m.id, m.parent from cte join mytable m on m.id = cte.parent
)
select id from cte where parent is null;