我刚开始编写递归查询,我正在尝试编写我的第一个。我试图确定公司层次结构的级别,并使结果表包含两列—顾问id和由递归查询确定的级别。在cte中,我不知道如何引用“level”,因为它是一个表中还不存在的列。我做错什么了?
WITH consultantsandlevels
(c."ConsultantDisplayID",
consultantsandlevels."level"
)
AS
(
SELECT c."ConsultantDisplayID",
0
FROM flight_export_consultant AS c
WHERE c."ParentPersonDisplayID" IS NULL
UNION all
SELECT c."ConsultantDisplayID",
c."ParentPersonDisplayID",
consultantsandlevels."level" + 1
FROM flight_export_consultant
JOIN consultantsandlevels ON c."ParentPersonDisplayID" = consultantsandlevels."ConsultantDisplayID"
)
SELECT *
FROM consultantsandlevels;
1条答案
按热度按时间gg0vcinb1#
我想你想要:
理论基础:
这个
WITH
子句必须以关键字开头RECURSIVE
comon表表达式的声明只是枚举列名(那里不应该出现表前缀)。这个
level
初始设置为0
,然后可以在每次迭代时通过引用相应的公共表表达式列来增加它。双方的疑问
UNION ALL
必须返回具有相应数据类型的相同列计数(对应于cte的声明)。