Oracle 一个较为复杂的查询sql问题

-狂奔的蜗牛- 2013-12-17 03:23:34
两张表

线 LINE
字段:
line_id、start_surface_id、end_surface_id
线的ID、开始面ID、结束面ID

面 SURFACE
surface_id

如何循环查询出所有和中心面关联的线和面?
已知中心面的surface_id为1。

类似下面截图,需要查询出中心面、A、B、C、D、E、F
G、H不需要查询。

start_surface_id、end_surface_id 没有方向限制,可以从A-B,也可以是B-A。
如何一句话查询出所有与中心面相关的线和面的所有数据。

...全文
273 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ze710 2014-01-16
  • 打赏
  • 举报
回复
引用 2 楼 z_shousi 的回复:
楼上说的不错。 这种是典型的树形结构,把开始面和结束面分别看成父节点和子节点就可以了。 用start with ... connect by prior ... 级联查询即可。
确实啊
  • 打赏
  • 举报
回复
楼上说的不错。 这种是典型的树形结构,把开始面和结束面分别看成父节点和子节点就可以了。 用start with ... connect by prior ... 级联查询即可。
CT_LXL 2013-12-17
  • 打赏
  • 举报
回复
引用 楼主 zhangminya 的回复:
两张表 线 LINE 字段: line_id、start_surface_id、end_surface_id 线的ID、开始面ID、结束面ID 面 SURFACE surface_id 如何循环查询出所有和中心面关联的线和面? 已知中心面的surface_id为1。 类似下面截图,需要查询出中心面、A、B、C、D、E、F G、H不需要查询。 start_surface_id、end_surface_id 没有方向限制,可以从A-B,也可以是B-A。 如何一句话查询出所有与中心面相关的线和面的所有数据。
你自己再和 SURFACE通过ID连接一下:

WITH t1 AS
( 
SELECT 'l1' line_id,'1' start_surface_id,'A' end_surface_id FROM dual UNION ALL 
SELECT 'l2' line_id,'1' start_surface_id,'B' end_surface_id FROM dual UNION ALL 
SELECT 'l3' line_id,'B' start_surface_id,'C' end_surface_id FROM dual UNION ALL 
SELECT 'l4' line_id,'C' start_surface_id,'D' end_surface_id FROM dual UNION ALL 
SELECT 'l5' line_id,'1' start_surface_id,'E' end_surface_id FROM dual UNION ALL 
SELECT 'l6' line_id,'1' start_surface_id,'F' end_surface_id FROM dual UNION ALL 
SELECT 'l7' line_id,'G' start_surface_id,'H' end_surface_id FROM dual )
SELECT distinct(t.end_surface_id) FROM (
SELECT * FROM t1
START WITH t1.start_surface_id='1'
CONNECT BY PRIOR t1.end_surface_id=t1.start_surface_id) t
ORDER BY T.END_SURFACE_ID

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧