Sql 从两个父列中的任一列获取所有子项和子项
我需要找到所有父子关系,它们都链接到我的主列Sql 从两个父列中的任一列获取所有子项和子项,sql,sql-server,Sql,Sql Server,我需要找到所有父子关系,它们都链接到我的主列ID 到目前为止,我已经尝试了下面的方法,但是只有一个专栏可以使用 WITH tb (id,Name, Level, Path, Parent) AS ( SELECT id,Name, 1 AS Level, CAST('/'+Name as nvarchar(max)) as Path, CAST(NULL as nvarchar(max)) as Parent FROM krishtest WHER
ID
到目前为止,我已经尝试了下面的方法,但是只有一个专栏可以使用
WITH tb (id,Name, Level, Path, Parent)
AS
(
SELECT
id,Name, 1 AS Level,
CAST('/'+Name as nvarchar(max)) as Path,
CAST(NULL as nvarchar(max)) as Parent
FROM krishtest
WHERE parent1 IS NULL
UNION All
SELECT
e.id,e.Name, x.Level + 1 AS Level, x.Path + '/' + e.Name as Path,
REVERSE(SUBSTRING( REVERSE(x.[Path]) ,0 , CHARINDEX( '/', REVERSE(x.[Path])) )) as [Parent]
FROM krishtest e
JOIN tb x ON x.id = e.parent1
)
SELECT Name, Level, Path, Parent FROM tb
据我所知,父项可以位于parent1或parent2列中;那么在这种情况下,您的查询应该如下 唯一的变化是使用关键字,它从列表中获取第一个非空值 错误假设parent1和parent2不在一起(非Null)。
有父母2的逻辑是什么?@Ultimater与父母1相同。parent1或Parent2将拥有详细信息[将来可能是parent3或Parent4]。所以我需要基于此创建输出。如果您有选择权,您应该将其更改为两个表。第一个将只有ID和Name列。第二个将有两列,ChildID和ParentID,每个关系一行。@KrishOnline这种在接受答案后编辑问题的方式在SO中通常是不受欢迎的。根据你的编辑,你一定要问一个新问题。[变色龙问题并不能真正帮助你解决向别人寻求帮助的目的SO@KrishOnline你的问题最初是关于选择的,现在它说明了一个完全不同的问题。如果你发布一个新问题,我肯定会尝试回答。酷。我会做的
;
WITH tb (id,Name, Level, Path, Parent)
AS
(
SELECT
id,Name, 1 AS Level,
CAST('/'+Name as nvarchar(max)) as Path,
CAST(NULL as nvarchar(max)) as Parent
FROM krishtest
WHERE COALESCE(parent1,parent2) IS NULL
UNION All
SELECT
e.id,e.Name, x.Level + 1 AS Level, x.Path + '/' + e.Name as Path,
REVERSE(SUBSTRING( REVERSE(x.[Path]) ,0 , CHARINDEX( '/', REVERSE(x.[Path])) )) as [Parent]
FROM krishtest e
JOIN tb x ON x.id = COALESCE(e.parent1,e.parent2)
)
SELECT Name, Level, Path, Parent FROM tb