还在学习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提前 干杯, 披
答案 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
。)