我有一张像贝洛一样的表......
ProjectID | ParentID | Project Name ...
----------------------------------------
1 | 1 | Project Name 1...
2 | 2 | Project Name 2...
3 | 3 | Project Name 3...
4 | 1 | Project Name 4 & Sub Project 1...
5 | 1 | Project Name 5 & Sub Project 1...
6 | 1 | Project Name 6 & Sub Project 1...
7 | 4 | Project Name 7 & Sub Project 1 & Sub Project 4...
8 | 4 | Project Name 8 & Sub Project 1 & Sub Project 4...
9 | 9 | Project Name 9...
此处 ProjectID 是主键& ParentID 表示子项目的主要或主要ProjectID。如果ProjectID = ParentID,则表示它是主(主)项目
现在问题是我是否想要取出子项目的子项目,这意味着, 如果我想看到 1 下的子项目,那么put就是......
ProjectID | ParentID | Project Name ...
----------------------------------------
1 | 1 | Project Name 1...
4 | 1 | Project Name 4 & Sub Project 1...
5 | 1 | Project Name 5 & Sub Project 1...
6 | 1 | Project Name 6 & Sub Project 1...
7 | 4* | Project Name 7 & Sub Project 1 & Sub Project 4...
8 | 4* | Project Name 8 & Sub Project 1 & Sub Project 4...
我如何比较?我是否必须使用#temp为1然后考虑#temp表的主要ID?或者有更好的解决方案吗?
答案 0 :(得分:0)
我认为最简单的方法是搜索ProjectName
列。它似乎包含层次结构信息:
select c.*
from content c
where ProjectName+' ' like '%Project 1 %'
额外的空格是确保Project 1
与Project 10
不匹配。
答案 1 :(得分:0)
您可以尝试以下SQL查询:
select projectid, parentid, projectname
from project_table
where Projectname like '%Sub_Project_1/%' escape '/'
and Projectname = 'Project_Name_1/%' escape '/';
答案 2 :(得分:0)
我找到了解决的方法。但实际的解决方案由Jayvee给出。对不起,我不知道它调用的方法,所以我想我没有完美地解释它。实际上我想在ProjectID的方面使用递归。
DECLARE @ProjectID int = 1
WITH DirectReports
AS
(
-- Anchor member definition
SELECT C.*
FROM tblProject AS C
WHERE C.ProjectID = @ProjectID
UNION ALL
-- Recursive member definition
SELECT C1.*
FROM tblProject AS C1
JOIN DirectReports AS d ON C1.ProjectID = d.ProjectID
)
-- Statement that executes the CTE
SELECT * FROM DirectReports
UNION ALL
SELECT C.*
FROM tblProject AS C
WHERE C.ProjectID = @ProjectID and C.ProjectID=C.ParentID
您可以找到更详细的Here。 感谢您的贡献。