-1

更新:我问了这个问题,因为结果看起来不像它是如何执行的......这在这里解释:http: //msdn.microsoft.com/en-us/library/ms186243(v=sql.105)。 aspx

好吧,我还有另一个问题...如果我不需要相同的父母和级别,是否可以使用 CTE(而不是之后的选择)或其他一些 sql 只返回一次父母?

============================ 期望的结果是这样的:

......
    54          4           
    **** the above is anchor member, the numbers are correct  
    4           1          
    1           0           
    2           1           
    36          35          
    35          8           
    8           1           
    54          12          
    12          1           
    11          1           
    3           1           

============================

我正在使用递归查询从 Hierarchy 表中查找所有父项,以获取 Items 表中的项目;我认为结果应该是 Level,但它不是......我知道我可以使用 order by 对其进行排序,我只是认为输出本身应该按 Level 排序,因为 Recursive Memeber 是由 Level 运行的,对吗?

            WITH Result(ItemID, ParentID, Level)
            AS
            (
                --get the anchor member from tbItems
                SELECT itemID, itemParentID, 0 AS Level
                FROM   tbItems  WHERE
                    approved = 0 
                UNION ALL
                --recursive member from tbHierarchy
                SELECT h.hierarchyItemID, h.parentItemID, Level + 1
                FROM tbHierarchy AS h
                INNER JOIN
                    Result AS r
                        ON
                        h.hierarchyItemID = r.ParentID          

            )
            SELECT *
            FROM Result

结果是:

    ItemID      ParentID    Level
    ----------- ----------- -----------
    7           3           0
    11          2           0
    18          11          0
    19          11          0
    21          54          0
    31          2           0
    33          36          0
    34          36          0
    35          36          0
    36          36          0
    38          2           0
    39          2           0
    40          2           0
    54          4           0
    **** the above is anchor member, the numbers are correct  
    4           1           1
    1           0           2
    2           1           1
    1           0           2
    2           1           1
    1           0           2
    2           1           1
    1           0           2
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    2           1           1
    1           0           2
    54          12          1
    12          1           2
    1           0           3
    11          1           1
    1           0           2
    11          1           1
    1           0           2
    2           1           1
    1           0           2
    3           1           1
    1           0           2
4

1 回答 1

2

数据库中的数据没有排序。如果不放order by,则无法确定输出的顺序。

永远不要认为数据库会按照你的想法做事,90% 的时候,这是错误的。数据库的目标是了解您的查询并找到找到解决方案的最快方法,而这往往不是您想的那样。

取决于您的编辑器,但有时您可以要求它解释用于寻找解决方案的计划,它可能会为您提供一些关于如何获得结果的解释。

于 2012-07-25T15:11:05.320 回答