MySQL中的依赖联合

t98cgbkg  于 2023-03-28  发布在  Mysql
关注(0)|答案(1)|浏览(99)

我在努力收集一个MySQL表中的一个(用户)帖子,其中一些是另一个的后代。目标是检索(A)符合某些标准的“根”职位,加上(B)那些帖子的后代。我试图将结果别名为(A)并将其与(B)的依赖结果进行UNION,但MySQL抱怨数据库没有具有别名的表。

SELECT * from 
(
    SELECT * FROM post WHERE [criteria for "root" posts]
) AS roots
UNION
(
    SELECT post.* FROM post LEFT JOIN postClosure on postClosure.descendant = post.id 
    WHERE postClosure.ancestor IN ( SELECT id from roots )
)

MYSQL说“表'[我的数据库名称].roots'不存在”
有没有一种方法可以绕过这个问题--不将子句“SELECT id from roots”重写为来自表“post”的显式SELECT语句--这将重复处理?

pw9qyyiw

pw9qyyiw1#

如果你只是想要“根”的直接后代,我们可以使用一个公共表表达式沿着union:

with roots as (select * from post where ... )
select * from roots
union all
select *
from post p
where exists (
    select 1 
    from postClosure pc 
    inner join roots r on r.id = pc.ancestor
    where pc.descendant = p.id 
)

相关问题