我需要從自鏈接表制作樹,例如:
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-無窮大中搜索某些內容時它會停止執行,因為查詢的遞回部分中沒有相關的行,而我只得到一個根。
uj5u.com熱心網友回復:
搜索直到找到
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;
查詢將在每個分支中找到第一個匹配節點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391457.html
標籤:sql PostgreSQL的 递归查询
上一篇:在docker容器djangopostgres中訪問sql轉儲
下一篇:SQL查詢日期范圍內表中的單個值
