sql - 如何递归检索可用城镇?
问题描述
我正在制作一个运输应用程序,现在,我正在实现 SQL 并编写一些查询。
我有一个表 Train(From, To),它基本上是一个有两列的表。第一列是您开始的城市,下一列是您到达的城市。
我的问题是我怎样才能递归地检索你可以从某个城市去的所有城市?例如,这是一个示例数据集:
从 | 到 |
---|---|
圣路易斯 | 杰斐逊城 |
杰斐逊城 | 柯克伍德 |
芝加哥 | 圣路易斯 |
柯克伍德 | 贝尔维尔 |
因此,如果我将 St. Louis 传递到这个递归函数中,我会得到 Jefferson City、Kirkwood 和 Belleville 作为可达城市。
SQL 语言是 Postgres/Sqlite :)
解决方案
使用WITH RECURSIVE
:
WITH RECURSIVE
c(t) AS (
SELECT "to" FROM cities
WHERE "from" = 'St Louis'
UNION
SELECT "to" FROM cities, c
WHERE c.t = cities."from"
)
SELECT t FROM c;
(在 sqlite3 中测试)。
推荐阅读
- scala - 如何在databricks中添加scala代码的日志记录?
- windows - ffmpeg 屏幕录制文件无法与 windows 媒体播放器一起播放视频
- sql - 如何在年份子句中使用计数
- reactjs - 重新绘制线不可见
- powerquery - 在 Power Query Excel 中合并两个表
- r - 在R ggplot2中将条形图绘制到地图上
- java - 通过设置属性来扩展具有主要/次要架构的有状态服务
- android - 从 Room Dao 在 Repo 参考中公开 Kotlin Flow 的最佳方式
- javascript - 在 React 中修改某些值时,为什么要使用 setState?
- javascript - 通过单击按钮播放 youtube 视频