微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL

数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的sql语句

现在数据库有一张Place表,用于存放中国的地区信息.


CREATE TABLE place
(
  id serial NOT NULL,--主键
  name character varying(200),--地区名
  parent_id bigint,--外键 父地区
  CONSTRAINT place_pkey PRIMARY KEY (id) --主键约束
)


数据库数据如下


向下递归

查询安徽以及安徽一下的所有记录


WITH RECURSIVE r AS ( 
       SELECT * FROM place WHERE id = 2
     union   ALL 
       SELECT place.* FROM place,r WHERE place.parent_id = r.id 
     ) 
SELECT * FROM r ORDER BY id;

查询结果如下


向上递归

查询三亚以及三亚以上所有记录

WITH RECURSIVE r AS ( 
       SELECT * FROM place WHERE id = 8
     union   ALL 
       SELECT place.* FROM place,r WHERE place.id = r.parent_id 
     ) 
SELECT * FROM r ORDER BY id;
查询结果如下


转载至:https://my.oschina.net/kenshiro/blog/160129

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐