Postgresql查询输出格式
我有两张桌子 组件Postgresql查询输出格式,sql,postgresql,Sql,Postgresql,我有两张桌子 组件 id - component_name parent_id(self ref) ---------------------------------------- 1 - computer 2 - cpu 1 3 - lcd 4 - keyboard 子组件 id - name ref_compon
id - component_name parent_id(self ref)
----------------------------------------
1 - computer
2 - cpu 1
3 - lcd
4 - keyboard
子组件
id - name ref_component
-------------------------------------
1 - motherboard 2
2 - ram 2
3 - processor 2
现在当我把计算机id传递到哪个位置时,我的期望输出应该如下
computer
-cpu
-processor
-motherboars
-ram
-lcd
-keyboard
如果您有无限级别的子组件,那么更好的方法是只使用
组件
表。由于它有一个自引用列,因此可以很容易地将其与
以下查询将完成此操作:
WITH RECURSIVE items AS (
SELECT c.id, c.component_name, 1 AS level, array[c.component_name]::text[] AS path
FROM component c
WHERE c.parent_id IS NULL
UNION ALL
SELECT c.id, c.component_name, i.level + 1, array_append(i.path, c.component_name)
FROM component c JOIN items i ON c.parent_id = i.id
)
SELECT repeat('|---', level-1) || component_name
FROM items
ORDER BY path;
repeat
函数只是为了使直接在数据库客户机上查看变得容易,在编程语言上,您可以使用级别
、id
和父id
(甚至只是路径
)来控制输出
请参见本例中的。如果子组件的级别无限,则更好的方法是仅使用
组件表。由于它有一个自引用列,因此可以很容易地将其与
以下查询将完成此操作:
WITH RECURSIVE items AS (
SELECT c.id, c.component_name, 1 AS level, array[c.component_name]::text[] AS path
FROM component c
WHERE c.parent_id IS NULL
UNION ALL
SELECT c.id, c.component_name, i.level + 1, array_append(i.path, c.component_name)
FROM component c JOIN items i ON c.parent_id = i.id
)
SELECT repeat('|---', level-1) || component_name
FROM items
ORDER BY path;
repeat
函数只是为了使直接在数据库客户机上查看变得容易,在编程语言上,您可以使用级别
、id
和父id
(甚至只是路径
)来控制输出
请参见本例中的。开头带有空格?您如何知道cpu是“计算机”的“子代”?组件
表中没有父/子信息。其空格表示意图。如果可能的话,@ShyamSolanki-你有多少等级?ie-您需要某种树组装查询吗?否则,您只需重新提交您先前的问题。请注意,与潜在副本一样,实际格式应该留给实际显示输出的程序。也。。。为什么有一个单独的子组件表?级别不固定。。高达n级..开头有空格?你怎么知道cpu是“计算机”的“子”呢?组件
表中没有父/子信息。其空格表示意图。如果可能的话,@ShyamSolanki-你有多少等级?ie-您需要某种树组装查询吗?否则,您只需重新提交您先前的问题。请注意,与潜在副本一样,实际格式应该留给实际显示输出的程序。也。。。为什么有一个单独的子组件表?级别不固定。。高达n级。。