我试着用这种方式展示产品种类;
Table Name: PSCategories
PSId | PSName | ParentId(FK to PSCategories(PSId) )
1 | test1 | NULL
2 | test2 | 1
3 | test3 | NULL
4 | test4 | 3
5 | test5 | 4我想以这种方式过滤这个表数据
PSId | PSName | ParentId
1 | test1 | 0
2 | test1 > test2 | 1
3 | test3 | 0
4 | test3 > test4 | 3
5 | test3 > test4 > test5 | 4此mssql查询可以执行,但如何将其转换为mysql?
WITH categories (PSId, PSName, ParentId)
AS (SELECT PSId, CAST(PSName AS VARCHAR(255)), 0
FROM PSCategories AS pm
WHERE pm.ParentId IS NULL
UNION ALL
SELECT ps.PSId, CAST(m.PSName + ' > ' + ps.PSName AS VARCHAR(255)), m.PSId
FROM PSCategories AS ps
JOIN categories AS m
ON m.PSId = ps.ParentId
WHERE ps.ParentId IS NOT NULL
)
SELECT * FROM categories
ORDER BY PSId发布于 2014-06-24 13:03:18
您不能,MySQL不支持递归(也不支持CTE)。
我很抱歉是坏消息的传达者,但是something_UID,something_parent_UID模式几乎总是一个反模式。
闭包表比递归要好得多(而且查询更简单,速度更快)。
因此,您应该将层次结构信息存储在闭包表中。见此处:http://dirtsimple.org/2010/11/simplest-way-to-do-tree-based-queries.html和http://www.mysqlperformanceblog.com/2011/02/14/moving-subtrees-in-closure-table/
闭包表还具有在不支持CTE &递归的MySQL上工作的优点。
https://stackoverflow.com/questions/24384385
复制相似问题