qq_53893977 2023-03-14 21:31 采纳率: 37%
浏览 14

数据库递归查询显示错误

数据库的递归查询,有点问题不知道出在哪
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;

  • 写回答

1条回答 默认 最新

  • 树莓大王 2023-03-14 21:59
    关注

    在这个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;
    

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

    评论

报告相同问题?

问题事件

  • 创建了问题 3月14日