我已经尝试了几个小时而没有成功,以递归方式加入一张桌子。在这个SQL小提琴中看到问题可能最简单,而不是我试图解释链接关系:
http://sqlfiddle.com/#!4/367c3/14
在上面的示例中,实际数据可能最多嵌套5层,可能更多。我想编写一个查询来处理任意数量的层的连接。
通过进行一些搜索,似乎可以使用CONNECT BY PRIOR以及其他方法递归地加入数据。我只是没有能够让它发挥作用:(。如果你们中的一个大师可以告诉我它是如何完成的,那就太棒了。
答案 0 :(得分:1)
将表格从SQL Fiddle复制给其他人以查看以后外部链接无效:
* DEVICE TABLE
DEVICEID DEVICENAME
-------------------
1 Device1
2 Device2
3 Device3
4 Device4
5 Device5
6 Device6
7 Device7
8 Device8
9 Device9
10 Device10
* CONNECTION TABLE
IDPARENT IDCHILD
----------------
1 2
3 4
4 5
6 7
7 8
4 8
4 8
5 9
我不知道你想从表中查询到什么数据,但是如果你只关心使用先前连接的自我“加入”,那么你可以去:
select distinct d.deviceid, d.devicename, connect_by_root(deviceid) rootdeviceid
from device d
left join connection c on (d.deviceid = c.idchild)
connect by prior d.deviceid = c.idparent
start with c.idparent is null
order by d.deviceid
请注意,根据您提供的表,此查询返回了11行 - 这是因为设备8实际上在您提供的层次结构中有两个根节点,即3和6。