SQL在同一表和查询中引用主键

时间:2019-01-30 16:04:54

标签: mysql sql database postgresql sqlite

我正在维护一个项目表( 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

1 个答案:

答案 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;