数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的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] 举报,一经查实,本站将立刻删除。