递归查询具有父子关系的表

简介:

   案例描述:

    一张表(r),有字段m,p , 其中字段m的值可以出现在字段p中,字段p的值也可以出现在m中,根据指定字段p的值,查询字段m的值集,然后将字段m的值集作为字段p的值进行递归查询,直到结果集大小为0。

   下面是一个简单的表(r)结构示例图:

    wKioL1PFKzqSpX9IAAA7ZHomQGw489.jpg


    看到上面的表结构,让人很容易想到树形结构,不过上图并不是一个严格意义上的树形结构。

    严格的树形结构是:根节点+子节点+叶子节点,其中根节点无父节点,子节点有子节点和父节点,叶子节点只有父节点。能够根据具一个节点查出所有的叶子节点,注意实际使用中往往字段m的值是唯一的。


   问题:查询出p=2的所有m值,再以m的值作为p的值进行递归查询。

   按照问题描述可以看出:

   p=2 查出 m=(4, 6)

   p=(4, 6)查出 m=(7, 7)

   p=m 无结果为止。


   PostgreSQL中的递归查询可以实现此功能:

 

1
2
3
4
5
6
WITH  RECURSIVE v  AS  (
     SELECT  r. "m" , r. "p"  from  where  r. "p" = '2'
     UNION  ALL
     SELECT  r. "m" , r. "p"  from   INNER  JOIN   on  r. "p" =v. "m"
)
select  from  v;


 说明:v作为结果集表,r是原数据表。



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1438630,如需转载请自行联系原作者

相关文章
|
Kubernetes Linux Windows
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
kubectl 本地远程链接k8s多个集群,远程管控多集群,查看日志 部署服务(windows版)
1377 0
|
SQL Go 数据库
SqlServer数据库(可疑)解决办法4种
亲自试过,可行!!!!! SqlServer数据库(可疑)解决办法4种   重启服务--------------------------------------------------日志文件丢了,建一个日志文件------------------------------------------...
2763 0
|
10月前
|
自然语言处理 监控 数据库
阿香婆ashampoo UnInstaller 14下载,彻底删除残留垃圾流氓软件
阿香婆卸载是一款功能强大的卸载工具,能自动检测并彻底删除软件及其残留文件。它支持深度清理注册表、浏览器插件及Windows应用,提供系统快照、批量卸载、磁盘整理等功能,操作简便,有效释放磁盘空间,提升电脑运行效率。
498 4
|
人工智能 编解码 语音技术
SpeechGPT 2.0:复旦大学开源端到端 AI 实时语音交互模型,实现 200ms 以内延迟的实时交互
SpeechGPT 2.0 是复旦大学 OpenMOSS 团队推出的端到端实时语音交互模型,具备拟人口语化表达、低延迟响应和多情感控制等功能。
3208 21
SpeechGPT 2.0:复旦大学开源端到端 AI 实时语音交互模型,实现 200ms 以内延迟的实时交互
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
Oracle 关系型数据库
oracle的start with connect by prior如何使用 整理
oracle的start with connect by prior如何使用 整理
1151 4
HDLC与PPP的区别
【4月更文挑战第11天】
1047 0
HDLC与PPP的区别
|
消息中间件 缓存 监控
Redis主从集群切换数据丢失问题如何应对?
1.异步复制丢失 对于Redis主节点与从节点之间的数据复制,是异步复制的,当客户端发送写请求给master节点的时候,客户端会返回OK,然后同步到各个slave节点中。 如果此时master还没来得及同步给slave节点时发生宕机,那么master内存中的数据会丢失; 要是master中开启持久化设置数据可不可以保证不丢失呢?答案是否定的。在master 发生宕机后,sentinel集群检测到master发生故障,重新选举新的master,如果旧的master在故障恢复后重启,那么此时它需要同步新master的数据,此时新的master的数据是空的(假设这段时间中没有数据写入)。那么旧m
1687 0
Redis主从集群切换数据丢失问题如何应对?
|
SQL 存储 Oracle
12.Mysql 多表数据横向合并和纵向合并
12.Mysql 多表数据横向合并和纵向合并
1136 3
|
数据采集 缓存 监控
百亿流量微服务网关的设计与实现(6)
百亿流量微服务网关的设计与实现(6)
860 0
百亿流量微服务网关的设计与实现(6)