嗨很多天我一直在研究MySQL中的这个问题,但我无法弄明白.你们有什么建议吗?
基本上,我有一个类别表,其域名包括:id,name(类别名称)和parent(类别的父ID).
示例数据:
1 Fruit 0
2 Apple 1
3 pear 1
4 FujiApple 2
5 AusApple 2
6 SydneyAPPLE 5
....
Run Code Online (Sandbox Code Playgroud)
有许多级别,可能超过3个级别.我想创建一个sql查询,根据他的层次结构对数据进行分组:parent> child> grandchild>等.
它应该输出树结构,如下所示:
1 Fruit 0
^ 2 Apple 1
^ 4 FujiApple 2
- 5 AusApple 2
^ 6 SydneyApple 5
- 3 pear 1
Run Code Online (Sandbox Code Playgroud)
我可以使用单个SQL查询执行此操作吗?我尝试过并且确实有效的替代方案如下:
SELECT * FROM category WHERE parent=0
Run Code Online (Sandbox Code Playgroud)
在此之后,我再次遍历数据,并选择parent = id的行.这似乎是一个糟糕的解决方案.因为它是mySQL,所以不能使用CTE.
我有一个问题,我无法理解.我知道我想要什么,只是简直无法在屏幕上看到它.我有一个看起来像这样的表:
Id, PK UniqueIdentifier, NotNull
Name, nvarchar(255), NotNull
ParentId, UniqueIdentifier, Null
Run Code Online (Sandbox Code Playgroud)
ParentId有一个FK到Id.
我想要完成的是获得我传入的Id下方所有id的平面列表.
例:
1 TestName1 NULL
2 TestName2 1
3 TestName3 2
4 TestName4 NULL
5 TestName5 1
Run Code Online (Sandbox Code Playgroud)
树看起来像这样:
-1
-> -2
-> -3
-> -5
-4
Run Code Online (Sandbox Code Playgroud)
如果我现在要求4,我只会回来4,但如果我要求1,我会得到1,2,3和5.如果我要求2,我会得到2和3,依此类推.
有谁能指出我正确的方向.我的大脑很油炸,所以我很感激能得到的所有帮助.
我有一个表类别,
1)Id
2)CategoryName
3)CategoryMaster
数据为:
1计算机0
2软件1
3多媒体1
4动画3
5健康0
6 Healthsub 5
我创建了递归查询:
;WITH CategoryTree AS
(
SELECT *, CAST(NULL AS VARCHAR(50)) AS ParentName, 0 AS Generation
FROM dbo.Category
WHERE CategoryName = 'Computers'
UNION ALL
SELECT Cat.*,CategoryTree.CategoryName AS ParentName, Generation + 1
FROM dbo.Category AS Cat INNER JOIN
CategoryTree ON Cat.CategoryMaster = CategoryTree.Id
)
SELECT * FROM CategoryTree
Run Code Online (Sandbox Code Playgroud)
我得到父类别的结果到底部,就像我得到计算机的所有子类别
但我希望从动画到计算机的自下而上的结果,请一些人建议我正确的方向.
先感谢您 :)
我试图基于它们之间的外键构建表的依赖图.此图需要以任意表名作为其根开始.我可以,给定一个表名查找使用all_constraints视图引用它的表,然后查找引用它们的表,依此类推,但这将是非常低效的.我写了一个递归查询,为所有表执行此操作,但是当我添加时:
START WITH Table_Name=:tablename
Run Code Online (Sandbox Code Playgroud)
它不会返回整个树.