我在SQL中有下表:
RiverID | RiverName | RecipientID
------------------------------------
0 | Atlantic Ocean | NULL
1 | Mississippi | 0
2 | Missouri | 1
3 | Yellowstone | 2
4 | Bighorn | 3
5 | Wind | 3RecipientID在我的表中的意思是:如果它是空的,那么表行代表一个海洋或一个封闭的排水盆地。如果RecipientID不为空,那么它就是一条连接下游另一条河流的河流。
现在我想问一个问题:给定一条河,找到下游的所有河流,直到你到达海洋。例如:给定河流“风”(RiverID=5),查询结果将显示:
Wind - Yellowstone - Missouri - Mississippi - Atlantic Ocean.如何用SQL编写此查询?
发布于 2014-01-14 14:49:55
并非所有SQL数据库都支持分层查询。当他们这样做的时候,语法往往是不同的。
如果系统中有最大数量的链接,则可以使用联接执行所需的操作:
select r.RiverName, r1.RiverName, r2.RiverName, r3.RiverName, r4.RiverName, r5.RiverName
from rivers r left outer join
rivers r1
on r.RecipientId = r1.RiverId left outer join
rivers r2
on r1.RecipientId = r2.RiverId left outer join
rivers r3
on r2.RecipientId = r3.RiverId left outer join
rivers r4
on r3.RecipientId = r4.RiverId left outer join
rivers r5
on r4.RecipientId = r5.RiverId ;这将名字放在五个单独的列中。您可以将它们连接在一起,将它们放在一个列中。
https://stackoverflow.com/questions/21116299
复制相似问题