我使用的是PostgreSQL 10,我有以下结构:
一种表类型,其本身带有一个外键。
id name parent_id
1 namea Null
2 nameb Null
3 namea1 1
4 namea11 3
5 namea111 4
6 nameb1 2
7 nameb2 2
<表格>
Item_Type
对于多对多关系
id type_id item_id
1 1 1
2 3 2
3 5 3
4 7 4
与类型具有M2M关系的表项。
id name
1 item1
2 item2
3 item3
4 item4
现在,我正在使用一个附加的
path
字段,每次使用类型进行操作(CRUD)时都会计算该字段。
我想知道使用PostgreSQL是否不快,也不容易
recursion
.
我检查了文档,但我没有很好地理解,因为我得到了一个错误,我不理解为什么。
WITH RECURSIVE descendants AS (
SELECT id, name FROM Type WHERE id = 1
UNION
SELECT t.id, t.name, t.parent_id FROM Type AS t
INNER JOIN descendants AS d ON d.id = t.parent_id
) SELECT * FROM descendants;
< Buff行情>
错误:每个联合查询的列数必须相同
< /块引用>
我需要的-给出一个类型名:
1)获取请求的所有名称/ID
Type
是后代
2)全部得到
Item
对于请求的
类型
和is后代,以及
项目的编号
per
类型
和后代
例如:
如果请求的类型名是“namea1”,我应该获取类型ID
1,3,4,5
和
对于项目ID
1,2,3