我有一个表,其中有 4 列,即:Book_no、Prev_Book_no(上一版 book_no)、Edition_no(从 0 开始到最新版 no(增量为 1))、Tree(最初为 null)。
我打算做的是从最高版本到第 0 版创建一棵 Book_no 树。
例如:(Book_no,Prev_Book_no,Edition_no) 值:(bbb,null,0), (ccc,bbb,1), (ddd,ccc,2), (eee,ddd,3), (fff,eee,4)
然后每一行的树应该是:(bbb),(ccc,bbb),(ddd,ccc,bbb),(eee,ddd,ccc,bbb)和(fff,eee,ddd,ccc,bbb)。
为此,我尝试使用递归 CTE,代码如下:
with cte(book_no,prev_book_no,tree,edition_no) as
(select
book_no,prev_book_no,tree,edition_no
from books
where edition_no>=0
union all
select e.book_no,e.prev_book_no,concat(nvl(e.tree,''),','+e.prev_book_no),e.edition_no
from
cte e inner join books f
on e.prev_book_no=f.book_no
)
select distinct * from cte
order by edition_no;
但是 Redshift 不允许在 from 子句中使用 cte table 并给出错误。'表 cte 不存在'。
PS 表中有多种不同的书籍。例如,我只提到了一本。
在 Redshift 中是否有任何替代方案?
编辑:
样本数据:
预期输出:
逻辑:我想获得书号的层次结构,并且正在使用 concat 操作。(当前代码可能是错误的)谢谢!