数据库递归查询显示错误

数据库的递归查询,有点问题不知道出在哪
union all后面的select语句中的agents标红了,报错是这个表不存在

create table FedEmp(
    Name varchar(255),
    salary int,
    manager varchar(255)
    );
insert into FedEmp
    values (
        'Lee',10000,'Judy'
           ),
        (
        'Zhuang Yan',9000,'Judy'
        ),
        (
         'Luo Ji',12000,'Wade'
           ),
        (
         'Cheng Xin',11000,'Wade'
           ),
        (
         'Yun Tianming',9500,'Talor'
           ),
        (
         'Judy',9700,'Sayi'
           ),
        (
         'Wade',13000,'Hui Zi'
           ),
        (
         'Talor',11500,'Hui Zi'
           ),
        (
         'Sayi',15000,'Three Body'
           ),
        (
         'Hui Zi',16000,'Three Body'
           ),
        (
         'Three Body',20000,NULL
           );
WITH agents(name1,salary) as (
    (select Name,salary from FedEmp where manager='Three Body')
    union all
    (select f.Name,f.salary from agents as a,FedEmp as f where f.manager=a.name1)
)
select name1 from agents where salary>11000;

在这个SQL语句中,递归查询使用了CTE(公共表表达式)来进行,但是错误出在了SELECT语句中的agents表。错误信息提示该表不存在,是因为agents只是一个CTE中的别名,不是一个实际的表。在SELECT语句中引用CTE时,应该使用CTE的名称而不是别名。所以建议将agents改成CTE名称,如下所示:

WITH agents(name1,salary) as (
    (select Name,salary from FedEmp where manager='Three Body')
    union all
    (select f.Name,f.salary from agents as a,FedEmp as f where f.manager=a.name1)
)
select name1 from agents where salary>11000;

这样就可以获得正确的结果了。