【发布时间】:2015-05-03 14:13:57
【问题描述】:
items 表中的每个项目都有一个部门ID,每个部门ID 最多可以有3 个祖父母。现在我需要显示每个项目及其部门和父母。
我做了 3 个简单的连接,就成功了。
SELECT tDepartment.id, tDepartment.Name, tDepartment_1.Name AS Parent1, tDepartment_2.Name AS Parent2, tDepartment_3.Name AS Parent3
FROM tDepartment AS tDepartment_3 RIGHT OUTER JOIN
tDepartment LEFT OUTER JOIN
tDepartment AS tDepartment_1 ON tDepartment.ParentID = tDepartment_1.id LEFT OUTER JOIN
tDepartment AS tDepartment_2 ON tDepartment_1.ParentID = tDepartment_2.id ON tDepartment_3.id = tDepartment_2.ParentID
ORDER BY tDepartment.Name
我的问题是,是否可以通过使用 CTE 或任何其他想法以更清洁的方式完成?
【问题讨论】:
-
该代码对我来说看起来不错。您可能需要 CTE 的原因是您希望它递归地找到每个父级,然后是该父级的父级,依此类推。如果是这种情况,请查找递归 CTE 的示例,其中有很多。如果您不喜欢查看自己编写的查询,请将其弹出到视图中,然后查询该视图。
-
右连接做你想做的事,但我只会使用左连接来减少下一个人的困惑。 CTE 可以做同样的事情,但我不认为它更干净。
-
感谢您的 cmets
-
术语“层次结构”和“路径”适用。他们会帮助你找到合适的例子。提示:使用适当的软件(MySQL、Oracle、DB2 等)和版本标记数据库问题很有帮助,例如
sql-server-2014。语法和功能的差异通常会影响答案。
标签: sql-server tsql parent-child sql-server-2014