vn 发帖数: 6191 | 1 基本大意是从tbItems里找出几个itemID
然后从tbHierarchy里找出他们的所有parents
WITH Result(ItemID, ParentID, Level)
AS
(
--get the anchor member from tbItems
SELECT c.itemID, itemParentID, 0 AS Level
FROM tbCatalogItems AS c
INNER JOIN
tbItems
ON
c.itemID = tbItems.itemID
WHERE
c.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
第一次用这个cte
不明白这个结果为什么不是按level排序出来的 这个顺序好怪啊?
或者有什么其他办法找parents的???我不需要那么多重复的parents,level也不需
要。。。
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
****以上是anchor member 是对的
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 |
o***i 发帖数: 603 | 2 输出可以加order by来排序呀
另外,可以加option MAXRECURSION 控制递归层数的
【在 vn 的大作中提到】 : 基本大意是从tbItems里找出几个itemID : 然后从tbHierarchy里找出他们的所有parents : WITH Result(ItemID, ParentID, Level) : AS : ( : --get the anchor member from tbItems : SELECT c.itemID, itemParentID, 0 AS Level : FROM tbCatalogItems AS c : INNER JOIN : tbItems
|
vn 发帖数: 6191 | 3 我知道可以排序 就是
觉得奇怪为什么这个输出不是按level来的(level来的应该是执行的顺序啊)?如果
sql本身不排序 输出随便什么顺序都可能吗?
另外如果不需要输出重复的parents 有没有更简单的方法呢?
【在 o***i 的大作中提到】 : 输出可以加order by来排序呀 : 另外,可以加option MAXRECURSION 控制递归层数的
|
o***i 发帖数: 603 | 4 The output order depends on key, query plan and index and so on ...
If you care the order, you MUST use an order by. There is no kind of "defaul
t order".
【在 vn 的大作中提到】 : 我知道可以排序 就是 : 觉得奇怪为什么这个输出不是按level来的(level来的应该是执行的顺序啊)?如果 : sql本身不排序 输出随便什么顺序都可能吗? : 另外如果不需要输出重复的parents 有没有更简单的方法呢?
|
o***i 发帖数: 603 | 5 I'm not sure what's your requirements. But if you'd like to output only the
p
arentid, change your last select statement:
SELECT *
FROM Result
to:
select distinct parentID From Results
I don't know if there is other easier way ...
【在 vn 的大作中提到】 : 我知道可以排序 就是 : 觉得奇怪为什么这个输出不是按level来的(level来的应该是执行的顺序啊)?如果 : sql本身不排序 输出随便什么顺序都可能吗? : 另外如果不需要输出重复的parents 有没有更简单的方法呢?
|
vn 发帖数: 6191 | 6 谢谢 看来是这样的 今天早上在statckoverflow上问了下 结果还被扣分了 555
不过基本和你说的是一致的。。。
http://stackoverflow.com/questions/11652673/result-from-cte-que
the
【在 o***i 的大作中提到】 : I'm not sure what's your requirements. But if you'd like to output only the : p : arentid, change your last select statement: : SELECT * : FROM Result : to: : select distinct parentID From Results : I don't know if there is other easier way ...
|
o***i 发帖数: 603 | 7 pat...
【在 vn 的大作中提到】 : 谢谢 看来是这样的 今天早上在statckoverflow上问了下 结果还被扣分了 555 : 不过基本和你说的是一致的。。。 : http://stackoverflow.com/questions/11652673/result-from-cte-que : : the
|