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

数据库递归查询显示错误

数据库的递归查询,有点问题不知道出在哪
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条回答 默认 最新

  • 憧憬blog 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日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见