Postgresql 如何在递归模式下为使用postgres的其他记录映射获取子类别ID?

Postgresql 如何在递归模式下为使用postgres的其他记录映射获取子类别ID?,postgresql,recursive-query,Postgresql,Recursive Query,如果我给category id是7,我希望输出为 category_id | category_name | category_parent_id 3 | All | NULL 4 | Stationary | 3 5 | Food | 3 6 | Solid | 5 7 | Liquid | 5

如果我给category id是7,我希望输出为

category_id | category_name | category_parent_id
3           | All           |   NULL
4           | Stationary    |    3
5           | Food          |    3
6           | Solid         |    5
7           | Liquid        |    5
8           | Soft Drinks   |    7
9           | Pepsi         |    8
10          | 7up           |    8
11          | Hot Item      |    7
12          | Tea           |   11
14          | Samusa        |    6

我们需要以递归模式列出类别id 7的所有子类别及其子类别。

您可能需要查看:


您可能想看看:


你试过自己解决这个问题吗?学习SQL最好的方法是练习SQL欢迎来到SO。除了@TimBiegeleisen消息外:下次询问数据库相关问题时,请提供
create table
insert
语句。在提出问题之前,最好先向我们展示你尝试过的东西,这样我们就可以看到你到底在哪里挣扎。第15项和第16项来自哪里?你是否尝试过自己解决这个问题?学习SQL最好的方法是练习SQL欢迎来到SO。除了@TimBiegeleisen消息外:下次询问数据库相关问题时,请提供
create table
insert
语句。在提出问题之前,向你展示你尝试过的东西总是合适的,这样我们就可以看到你到底在哪里挣扎。第15项和第16项来自哪里?
category_id | category_name | category_parent_id
7           | Liquid        |    5
8           | Soft Drinks   |    7
11          | Hot Item      |    7
9           | Pepsi         |    8
10          | 7up           |    8
12          | Tea           |   11
15          | Can(100Ml)    |   10
16          | Can(250ML)    |   10
WITH RECURSIVE 
  mapping(category_parent_id,category_id,category_name) AS (
   SELECT category_parent_id,category_id,category_name FROM t
   UNION 
   SELECT mapping.category_parent_id, t.category_id, t.category_name FROM mapping, t
     WHERE mapping.category_id = t.category_parent_id
) SELECT category_id, category_name FROM mapping WHERE category_parent_id = 7;

 category_id | category_name 
-------------+---------------
           8 | Soft Drinks
          11 | Hot Item
          10 | 7up
           9 | Pepsi
          12 | Tea
(5 Zeilen)