【发布时间】:2014-07-24 21:11:02
【问题描述】:
我正在尝试在 Oracle 上编写一个涉及两个表的分层查询:
GeoNodes
Name, uuid, lat, lon
GeoParents
parent_uuid, child_uuid
示例数据:
GeoNodes
Name UUID lat lon
test1 123 0 0
test2 124 0 0
test3 125 0 0
test4 126 0 0
GeoParents
parent_uuid child_uuid
123 124
123 125
124 126
在这个例子中,我有:
- test2 和 test3 的 test1 父级
- test4 的 test2 父级
geoparents 表中没有空值。在 geoparents 上,geonodes 的 uuid 列上有两个 FK(一个用于子级,一个用于父级),用于维护两个表之间的数据完整性。
如您所见,父子之间的链接保留在外部表上。 为了让所有人都更加复杂,一些节点有不止一个父节点。
遗憾的是,我不明白将联接放在查询中的哪个位置以使其正常工作。我搜索了示例,但所有示例在数据表中都有父列。
这是提取一些全等数据的唯一查询,但遗憾的是无法获得根记录:
select Lpad(soc || '_' || name,Length(soc || '_' || name) + LEVEL * 3 - 3,'-')
from geonodes g, geoparents p
where g.uuid = p.child_uuid
start with name = 'myTest'
connect by prior g.uuid = p.PARENT_UUID
order siblings by name;
提前感谢您的帮助。
【问题讨论】:
-
能否请您发布一些数据示例。
-
事先连接应该会有所帮助。