小编Joh*_*son的帖子

打破 Postgres 11 中的递归查询

我在从树结构中获取正确的数据时遇到了一些麻烦,我只希望分支匹配条件中的第一个节点成为查询的结果。

我有这个域表:

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.comc.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)

postgresql postgresql-11

5
推荐指数
1
解决办法
2162
查看次数

标签 统计

postgresql ×1

postgresql-11 ×1