sqlite递归祖先查询

tsc*_*eld 5 sqlite recursive-query

我正在尝试弄清楚如何对分层表使用递归查询。我需要获取给定记录的祖先,并且记录应该按照它们在层次结构中的级别进行排序。也就是说,第一个记录应该是顶部节点,下一个应该是一个子节点,然后是它的子节点,直到被查询的记录。

考虑一个名为“食物”的表,其中包含以下数据。这是一个简单的层次结构,除了顶部记录之外的每条记录都有一个父记录。

id         | parent
-----------+---------
top        |
fruit      | top
red        | fruit
cherry     | red
apple      | red
orange     | fruit
clementine | orange
mandarin   | orange
Run Code Online (Sandbox Code Playgroud)

为了了解有关该主题的各种网页,我拼凑了以下查询,该查询给出了“普通话”记录的所有祖先,包括普通话记录本身。

with recursive
    child_record(id) as (
        values('mandarin')

        union

        select parent
        from food, child_record
        where food.id = child_record.id
    )
select id from food
    where food.id in child_record;
Run Code Online (Sandbox Code Playgroud)

但是,该查询以在我看来是任意顺序的记录返回:

fruit
mandarin
orange
top
Run Code Online (Sandbox Code Playgroud)

我希望记录首先按最高记录排序,然后再向下排列到普通话记录。

top
fruit
orange
mandarin
Run Code Online (Sandbox Code Playgroud)

如何构建该查询以按我想要的顺序提供记录?

ral*_*.w. 1

我建议按 rowid 排序:

with recursive
    child_record(id) as (
        select 'mandarin'

        union

        select parent
        from food, child_record
        where food.id = child_record.id
    )
select id from food
    where food.id in child_record 
    order by food.rowid;
Run Code Online (Sandbox Code Playgroud)