首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite到Postgres层次结构查询

SQLite到Postgres层次结构查询
EN

Stack Overflow用户
提问于 2015-10-31 19:38:40
回答 1查看 62关注 0票数 1

下面是我在SQLite中成功使用的一个查询。它创建了属于"Pak“的所有链接的层次结构。

代码语言:javascript
复制
WITH LinkTree(link_id, link_pid, pak_id, link_name, depth)
AS
(
SELECT *, 0 AS depth FROM links
WHERE link_pid = 0

UNION ALL
SELECT l.*, lt.depth+1 AS depth FROM LinkTree lt
JOIN links l ON (lt.link_id = l.link_pid)
)
SELECT * FROM LinkTree WHERE pak_id = 1; 

我试图对其进行修改,使其与Postgres一起工作,但我说“深度”是一种矛盾的说法是错误的。

有两个简单的表:

代码语言:javascript
复制
Paks: pak_id, pak_name
Links: link_id, link_pid, link_name, pak_id

所有列都是整数,但*_name是varchars。

有谁可以帮我?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-31 19:39:39

我认为您需要RECURSIVE关键字:

代码语言:javascript
复制
WITH RECURSIVE LinkTree(link_id, link_pid, pak_id, link_name, depth)
AS
(
SELECT *, 0 AS depth FROM links
WHERE link_pid = 0

UNION ALL
SELECT l.*, lt.depth+1 AS depth FROM LinkTree lt
JOIN links l ON (lt.link_id = l.link_pid)
)
SELECT * FROM LinkTree WHERE pak_id = 1; 

编辑:

不要在select中使用*

代码语言:javascript
复制
WITH LinkTree(link_id, link_pid, pak_id, link_name, depth)
AS
(
  SELECT link_id, link_pid, pak_id, link_name, 0 AS depth 
  FROM links
  WHERE link_pid = 0
  UNION ALL
  SELECT l.link_id, l.link_pid, l.pak_id, l.link_name, lt.depth+1 AS depth 
  FROM LinkTree lt
  JOIN links l 
    ON lt.link_id = l.link_pid
)
SELECT * 
FROM LinkTree 
WHERE pak_id = 1; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33455801

复制
相关文章

相似问题

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