数据库的递归查询,有点问题不知道出在哪
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;
这样就可以获得正确的结果了。