本文共 553 字,大约阅读时间需要 1 分钟。
案例描述:
一张表(r),有字段m,p , 其中字段m的值可以出现在字段p中,字段p的值也可以出现在m中,根据指定字段p的值,查询字段m的值集,然后将字段m的值集作为字段p的值进行递归查询,直到结果集大小为0。
下面是一个简单的表(r)结构示例图:
看到上面的表结构,让人很容易想到树形结构,不过上图并不是一个严格意义上的树形结构。
严格的树形结构是:根节点+子节点+叶子节点,其中根节点无父节点,子节点有子节点和父节点,叶子节点只有父节点。能够根据具一个节点查出所有的叶子节点,注意实际使用中往往字段m的值是唯一的。
问题:查询出p=2的所有m值,再以m的值作为p的值进行递归查询。
按照问题描述可以看出:
p=2 查出 m=(4, 6)
p=(4, 6)查出 m=(7, 7)
p=m 无结果为止。
PostgreSQL中的递归查询可以实现此功能:
WITH RECURSIVE v AS ( SELECT r."m", r."p" from r where r."p"='2' UNION ALL SELECT r."m", r."p" from r INNER JOIN v on r."p"=v."m")select * from v;
说明:v作为结果集表,r是原数据表。
转载地址:http://vxafo.baihongyu.com/