使用CTE查找根节点的所有后代

时间:2016-01-15 08:33:54

标签: sql sql-server

我需要显示父节点有多少个后代,但在下面的查询中它显示了相反的方式。

class ApplicationSonataMediaBundle extends Bundle
{
    /**
     * {@inheritdoc}
     */
    public function getParent()
    {
        return 'SonataMediaBundle';
    }
}

在我的表结构中,我们将PKAssembly作为childId,将FKParentAssembly作为parentId。如果两者对于记录都相同,则表示其为父或单根。 结果如下所示:

WITH AssemblyList AS 
(
SELECT 
        T.PKAssembly,
        T.FKParentAssembly,
        T.AssemblyNumber, 
        0 AS AssemblyLevel
FROM CT_Assemblies T WHERE T.FKParentAssembly = T.PKAssembly AND T.FKCustomer = 12 AND T.FKState = 1

UNION ALL

SELECT  A.PKAssembly,
        A.FKParentAssembly,
        A.AssemblyNumber,
        AL.AssemblyLevel + 1
FROM CT_Assemblies A 
INNER JOIN AssemblyList AS AL ON A.FKParentAssembly = AL.PKAssembly 
WHERE A.FKParentAssembly != A.PKAssembly AND A.FKCustomer = 12 AND A.FKState = 1
)
SELECT * FROM AssemblyList 

这里第一条记录应该显示6,第二条记录显示为0,但它的反面方式相反。 我应该在查询中更改哪些内容才能使其正常工作?

0 个答案:

没有答案