我有一張桌子叫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 視圖中做到這一點。
uj5u.com熱心網友回復:
您可以在視圖中使用遞回 CTE:
CREATE VIEW categories_view AS
WITH RECURSIVE cte AS (
SELECT id, parentId, name, name AS path
FROM categories
WHERE parentId IS NULL
UNION ALL
SELECT c.id, c.parentId, c.name, CONCAT_WS(' > ', t.path, c.name)
FROM categories c
INNER JOIN cte t ON c.parentId = t.id
)
SELECT *
FROM cte
ORDER BY id;

這是一個演示,顯示邏輯正在運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401818.html
下一篇:檢查公寓的可用性
