我有一个名为categories
的表,其中有三列:id
、parentId
和name
。parentId
列是引用同一表的id
列的外键。
类别
| id | parentId | name |
|----|----------|-----------|
| 1 | NULL | expense |
| 2 | 1 | food |
| 3 | 2 | grocery |
| 4 | 3 | meat |
| 5 | 3 | fruit |
| 6 | 2 | dining |
我想创建一个名为categories_view
的视图,该视图返回categories
表并添加一个名为path
的列,该列为该记录创建一个路径,该路径是父记录的路径(如果父记录不是NULL
)和name
的名称。
类别视图
| id | parentId | name | path |
|----|----------|-----------|----------------------------------|
| 1 | NULL | expense | expense |
| 2 | 1 | food | expense > food |
| 3 | 2 | grocery | expense > food > grocery |
| 4 | 3 | meat | expense > food > grocery > meat |
| 5 | 3 | fruit | expense > food > grocery > fruit |
| 6 | 2 | dining | expense > food > dining |
如果我用javascript或其他工具来做这件事,我可以只使用递归,但我不知道如何在SQL视图中做到这一点。
1条答案
按热度按时间jv4diomz1#
可以在视图中使用递归CTE:
这是一个demo,显示逻辑工作正常。