2
我剛剛開始使用MySQL(我以前使用過SQL Server)。我還沒有開始在MySQL中實現任何東西,只是研究如何做事情和我可能遇到的問題。MySql中的遞歸CTE樹結構(鄰接列表)
在SQL Server中,我已經使用CTE成功遞歸通過鄰接表列表結構來生成所需的結果集。從我迄今爲止所知道的MySQL中,它不支持CTE。我有一個非常簡單的表結構來保存我的層次結構(用它我熟悉的SQL Server語法B/C):
CREATE TABLE TreeNodes (
NodeId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ParentNodeId int NULL,
Name varchar(50) NOT NULL,
FullPathName varchar(MAX) NOT NULL, -- '/' delimited names from root to current node
IsLeaf bit NOT NULL -- is this node a leaf?
)
旁註:我知道FullPathName和IsLeaf不需要並且可以在查詢時確定,但插入樹節點將是非常罕見的事情,而不是針對此表的查詢 - 這就是爲什麼我計劃將這兩個值作爲插入SP的一部分進行計算(將使得查詢需要這兩個值的成本較低)。
隨着CTE(SQL Server中),我會像下面找到當前節點的葉節點的功能:
CREATE FUNCTION fn_GetLeafNodesBelowNode (
@TreeNodeId int
)
RETURNS TABLE
AS
RETURN
WITH Tree (NodeId, Name, FullPathName, IsLeaf)
AS (
SELECT NodeId, Name, FullPathName, IsLeaf FROM TreeNodes WHERE NodeId = @TreeNodeId
UNION ALL
SELECT c.NodeId, c.Name, c.FullPathName, c.IsLeaf FROM Tree t
INNER JOIN TreeNodes c ON t.NodeId = c.ParentNodeId
)
SELECT * FROM Tree WHERE IsLeaf = 1
我怎麼會做同樣的與MySQL?
在此先感謝。