【问题标题】:SQL, OrgNode, HierarchySQL,OrgNode,层次结构
【发布时间】:2016-06-14 08:52:19
【问题描述】:

我有一个问题: 表一:

SELECT OrgNode as 'hierarchyid'
, OrgLevel as "non-type '
, UniCODOBJ as 'uniqueidentifier'
, BitREQUIRED as "bit"
, StrField as 'nvarchar (50)'
, StrTITLE_FIELD as 'nvarchar (50)'
, IntCODE_LENGTH as 'int'
OF BOX_HIERARCHY

我有疑问:

DECLARE @CurrentNode hierarchyid
SELECT @ CurrentNode = OrgNode
OF BOX_HIERARCHY
where uniCODOBJ = 'CBC33732-2E4C-4103-887A-B968E53C0E05';

SELECT OrgNode, OrgNode.ToString ()
, OrgLevel
, uniCODOBJ
, bitREQUIRED
, strField
, strTITLE_FIELD
, intCODE_LENGTH
of BOX_HIERARCHY
where OrgNode.IsDescendantOf (@CurrentNode) = 1

但是,这个查询返回:

OrgNode OrgNode.string OrgLevel BitRequired
0x78 / 3/1 1
0x7AC0 / 3/1/2 1
0x7AD6 / 3/1/1/3 0
0x7AD6B0 / 3/1/1/1/4 0
0x7AD6B580 / 3/1/1/1/1/5 1
0x7AD6B5AC / 3/1/1/1/1/1/6 1

因为 OrgNode -> 0x78 有 uniCODOBJ: CBC33732-2E4C-4103-887A-B968E53C0E05

我的问题在哪里? 只需要直子:

与 OrgNode -> 0x78 只有 1 个直接子节点

OrgNode OrgNode.string OrgLevel BitRequired

0x78 / 3/1 1
0x7AC0 / 3/1/2 1

与 OrgNode -> 0x7AC0 与 3 个可能的直接子代 OrgNode OrgNode.string OrgLevel BitRequired

0x7AC0 / 3/1/2 1
0x7AD6 / 3/1/1/3 0
0x7AD6B0 / 3/1/1/1/4 0
0x7AD6B580 / 3/1/1/1/1/5 1

我有兴趣获取用于获取所有可能的直接子级的查询 但该查询返回我所有亲戚的孩子 如果我必须经历 3 个级别,如 0x7AD6B5AC 案例中的第 6 级,3 个级别至少为 0x78 并为 0x78 进行咨询,它会返回所有我,我不在乎。

【问题讨论】:

    标签: mysql sql hierarchy


    【解决方案1】:

    自己发布解决方案:

    ALTER PROCEDURE [dbo].[GET_CHILD_REPOS] @id uniqueidentifier
    AS
    BEGIN
        SET NOCOUNT ON;
    
        DECLARE @hi hierarchyid;
        SELECT @hi = OrgNode FROM BOX_HIERARCHY
        WHERE uniCODOBJ = @id
    
        SELECT h.OrgNode.ToString() AS OrgNode, h.OrgLevel, h.uniCODOBJ, h.bitREQUIRED,
        strFIELD, t.strARCTAB, t.strNOMOBJ
        FROM BOX_HIERARCHY h
        INNER JOIN tabTABLAS t
        ON h.uniCODOBJ = t.uniCODPAD
        WHERE OrgNode.IsDescendantOf(@hi) = 1
        AND OrgNode <> @hi
        AND OrgLevel <=
        (
            SELECT MIN(OrgLevel)
            FROM
            (
                SELECT h.OrgNode.ToString() AS OrgNode, h.OrgLevel, h.uniCODOBJ, h.bitREQUIRED,
                strFIELD, t.strARCTAB, t.strNOMOBJ
                FROM BOX_HIERARCHY h
                INNER JOIN tabTABLAS t
                ON h.uniCODOBJ = t.uniCODPAD
                WHERE OrgNode.IsDescendantOf(@hi) = 1
                AND OrgNode <> @hi
            ) a
            WHERE bitREQUIRED = 1
        )
        ORDER BY OrgNode
    
    END
    

    【讨论】:

      猜你喜欢
      • 2019-08-10
      • 2011-08-27
      • 2020-11-30
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      相关资源
      最近更新 更多