在Postgresql递归查询中搜索字段

Search for field in Postgresql recursive query

我需要从自链接 table 制作树,例如:

CREATE TABLE tree(
id serial primary key,
parent int4,
text_field varchar(255)
);

关于递归 CTE 的主题讲述了当 select 语句的递归部分没有行时递归查询停止执行递归。我需要某种深度搜索,我的查询方式不对:

WITH RECURSIVE tree_query as(
SELECT T0.id, T0.parent, T0.text_field
FROM tree T0
WHERE T0.parent is null --search from root
UNION
SELECT TT0.id, TT0.parent, TT0.text_field
FROM tree TT0
INNER JOIN tree_query t ON t.id = TT0.parent
WHERE TT0.text_field LIKE '%smth%'
)
SELECT * FROM tree_query;

它出错的主要原因 - 当我在 3 级无限中搜索某些东西时它停止执行,因为在查询的递归部分没有相关行,我只得到一个根。

搜索直到找到

WITH RECURSIVE tree_query as(
  SELECT T0.id, T0.parent, T0.text_field, (T0.text_field LIKE '%smth%') as found  
  FROM tree T0
  WHERE T0.parent is null --search from root
  UNION
  SELECT TT0.id, TT0.parent, TT0.text_field, (TT0.text_field LIKE '%smth%') 
  FROM tree TT0
  INNER JOIN tree_query t ON t.id = TT0.parent
  WHERE NOT t.found
)
SELECT * 
FROM tree_query
WHERE found;

查询将在每个分支中找到第一个匹配的节点。