首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在一个SQL查询中查找层次结构中的子项和父项

如何在一个SQL查询中查找层次结构中的子项和父项
EN

Stack Overflow用户
提问于 2018-01-28 16:48:37
回答 1查看 91关注 0票数 0

我们有具有树状层次结构的表:

代码语言:javascript
运行
复制
id, path
1, "/1/"
2, "/1/2/"
3, "/1/2/3/"
4, "/1/2/3/4/"
5, "/1/5/"
6, "/1/5/6/"

id - int, path - string. 

表没有任何父级和深度的引用。

那么问题是,如何获取任何元素的子元素和父元素?当前的解决方案类似于此SELECT * FROM table WHERE ((path LIKE '/1/2/' || '%') OR ('/1/2/' LIKE path || '%'));。它很慢,并且可以通过PostgreSQL索引进行优化(查询的第二部分,第一部分是通过GIN索引优化的)。

我试着使用inner join,但它比当前的解决方案慢。

EN

回答 1

Stack Overflow用户

发布于 2018-01-28 16:53:14

如果你坚持你的设计,你可以把它重写成:

代码语言:javascript
运行
复制
SELECT * 
FROM table 
WHERE path LIKE '/1/2/' || '%'
UNION ALL
SELECT * 
FROM table 
WHERE '/1/2/' LIKE path || '%';

并在path上添加索引。

代码语言:javascript
运行
复制
CREATE INDEX index_name ON table(path);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48484645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档