首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >河网查询

河网查询
EN

Stack Overflow用户
提问于 2014-01-14 14:40:54
回答 1查看 138关注 0票数 0

我在SQL中有下表:

代码语言:javascript
运行
复制
RiverID | RiverName      | RecipientID
------------------------------------
0       | Atlantic Ocean | NULL
1       | Mississippi    | 0
2       | Missouri       | 1
3       | Yellowstone    | 2
4       | Bighorn        | 3
5       | Wind           | 3

RecipientID在我的表中的意思是:如果它是空的,那么表行代表一个海洋或一个封闭的排水盆地。如果RecipientID不为空,那么它就是一条连接下游另一条河流的河流。

现在我想问一个问题:给定一条河,找到下游的所有河流,直到你到达海洋。例如:给定河流“风”(RiverID=5),查询结果将显示:

代码语言:javascript
运行
复制
Wind - Yellowstone - Missouri - Mississippi - Atlantic Ocean.

如何用SQL编写此查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-14 14:49:55

并非所有SQL数据库都支持分层查询。当他们这样做的时候,语法往往是不同的。

如果系统中有最大数量的链接,则可以使用联接执行所需的操作:

代码语言:javascript
运行
复制
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 ;

这将名字放在五个单独的列中。您可以将它们连接在一起,将它们放在一个列中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21116299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档