我在从树结构中获取正确的数据时遇到了一些麻烦,我只希望分支匹配条件中的第一个节点成为查询的结果。
我有这个域表:
create table domains(
id bigint,
domain_name varchar,
parent_id bigint,
valid boolean
)
insert into domains values
(1, 'example.com', null, false),
(2, 'a.example.com', 1, true),
(3, 'b.example.com', 1, false),
(4, 'c.b.example.com', 3, true),
(5, 'd.a.example.com', 2, true)
Run Code Online (Sandbox Code Playgroud)
这给出了这棵树,其中有效域为绿色:
基于此,我希望a.example.com和c.b.example.com作为有效域返回。如果顶级域名example.com有效,则仅应返回该顶级域名。(“有效”只是其他地方确定的标志。)
我有一个递归查询来获取整个域树:
WITH RECURSIVE valid_domains AS (
SELECT id, domain_name, valid FROM domains
WHERE parent_id IS NULL
UNION ALL
SELECT d.id, d.domain_name, d.valid FROM domains d
JOIN valid_domains vd ON d.parent_id = vd.id
)
SELECT …Run Code Online (Sandbox Code Playgroud)