如何在postgresql中使用递归查询连接字段值?
发布时间:2020-12-13 16:01:42 所属栏目:百科 来源:网络整理
导读:我在PostgreSQL数据库中有一个表,它包含树形式的部分地址,如下所示: Id | Name | ParentId1 | London | 02 | Hallam Street| 13 | Bld 26 | 24 | Office 5 | 3 我想查询返回一个地址,从所有祖先名称连接.我需要结果表是这样的: Id | Address1 | London2 |
我在PostgreSQL数据库中有一个表,它包含树形式的部分地址,如下所示:
Id | Name | ParentId 1 | London | 0 2 | Hallam Street| 1 3 | Bld 26 | 2 4 | Office 5 | 3 我想查询返回一个地址,从所有祖先名称连接.我需要结果表是这样的: Id | Address 1 | London 2 | London,Hallam Street 3 | London,Hallam Street,Bld 26 4 | London,Bld 26,Office 5 我想我必须使用WITH RECURSIVE查询,但我发现的所有示例都使用where子句,因此我必须将WHERE name =’Office 5’设置为仅为该特定行获取结果.但是我的初始表的每一行都需要一个连接的地址.如何才能做到这一点? 解决方法
递归查询的技巧是您需要指定种子查询.这是确定根节点的查询,或者是您要构建的树的下降或提升的起点.
WHERE子句的原因是建立种子ID = 1或Name = Bld 26.如果您希望每条记录都有树上升或下降(取决于您在联合选择中指定的内容),那么您应该只是废弃WHERE语句所有记录都是种子. 虽然,您提供的示例…您可能希望从种子中的WHERE ID = 1开始,但要写出子ID和父ID.然后在Union’d SELECT中将您派生的递归表与您正在选择的表一起加入,并将Derived Recursive表的Child连接到表的父级. 就像是: WITH RECURSIVE my_tree AS ( -- Seed SELECT ID as Child,ParentID as Parent,Name,Name as Address FROM <table> WHERE <table>.ID = 1 UNION -- Recursive Term SELECT table.id as Child,table.parent_id as Parent,table.name,t.address || ',' || table.name as Address FROM my_tree as t INNER JOIN <table> table ON t.Child = table.Parent_Id ) SELECT Child,Address from my_tree; 我之前没有使用过PostgreSQL,所以你可能不得不对语法有点兴奋,但我认为这对于RDBMS非常准确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |