使用cte的行走清单

时间:2015-04-14 09:24:47

标签: sqlite common-table-expression

还在学习SQL :) 这次我想要一个链接列表'从一张桌子走,我猜使用CTE。 尽管在网络上有所有的例子我找不到一个简单的例子,我可以从那里开始偷看并从那里戳。

这是我的表

create table yo (id integer, nx integer)
select * from yo
id          nx
----------  ----------
1           5
2           4
3           7
4           9
5           3
6           0
7           0
8           6
9           8

我希望获得一个' id',' nx'来自你的下一个链接' nx'给出了一个开始'

这是一个开始' id' 1会产生

id          nx
----------  ----------
1           5
3           7
5           3
7           0

请注意,0是结束标记。

我无法找到这样做的神奇SQL Thanx提前 干杯, 披

1 个答案:

答案 0 :(得分:2)

列表的第一行很简单:

SELECT id, nx
FROM yo
WHERE id = 1

如果上一个条目的nx列可用作list.nx,则可以使用此查询返回下一个条目:

SELECT yo.id, yo.nx
FROM yo
JOIN list ON yo.id = list.nx

然后将这些插在一起:

WITH RECURSIVE list(id, nx) AS (
  SELECT id, nx
  FROM yo
  WHERE id = 1
  UNION ALL
  SELECT yo.id, yo.nx
  FROM yo
  JOIN list ON yo.id = list.nx
)
SELECT * FROM list

(由于没有id为零的行,因此会自动停止;否则,您可以添加WHERE list.nx != 0。)