gpt4 book ai didi

mysql - select语句中的CTE递归查询

转载 作者:行者123 更新时间:2023-11-29 16:01:17 25 4
gpt4 key购买 nike

我有两台 MySQL 服务器版本 8.0,一台用于本地开发,另一台在 Heroku 实例上,更准确地说,在 Heroku 上我正在使用名为 JAWSDB 的服务。 .

对于我的项目,我必须使用以下 CTE 查询,因为表 tree_struct 的结构是分层的。

查询的目的是,对于tree_struction中的每一行,我必须获取其所有子级,然后计算user_roles表中存在多少用户该特定行及其子行。

SELECT mtr.id,
mtr.parent_id,
mtr.name,
mtr.manager_id,
CONCAT(users.nome, ' ', users.cognome) as resp_name,
(
with recursive cte (id, name, parent_id) as (
select id,
name,
parent_id
from tree_structure as tr_rec
where tr_rec.parent_id = mtr.id
and tr_rec.session_id = '2018'
union all
select tr.id,
tr.name,
tr.parent_id
from tree_structure as tr
inner join cte
on tr.parent_id = cte.id
WHERE tr.session_id = '2018'
)
select count(distinct (user_id))
from user_roles as ur_count
where ur_count.structure_id in (select distinct(id) from cte)
) as utenti
FROM tree_structure as mtr
LEFT JOIN users ON mtr.manager_id = users.id
WHERE level = 0

问题是在我的本地服务器上它可以工作,而在heroku实例上它给了我以下错误:

where 子句中未知列 mtr.id

有人知道导致此错误的原因吗?

提前致谢,并对我的英语不好表示歉意。

最佳答案

您在 CTE 中的表引用不明确:

SELECT 
....
(with recursive cte (id, name, parent_id) as (
....
from tree_structure as tr_rec -- here you have aliased the table
where tr_rec.id = tree_structure.id -- here you refer to the table and its alias
and tr_rec.session_id = '2018'
union all
....
)
....
) as utenti
....

表Tree_Structure用于子查询和最外层查询。好的做法是为您使用的每个表引用创建一个唯一的别名。

此外,您在应检查层次结构根节点的自引用的情况下也有拼写错误:

where tr_rec.id = tr_rec.parent_id
and tr_rec.session_id = '2018'

关于mysql - select语句中的CTE递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com