由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问一个query,about Recursive Queries Using Common Table Expressions
相关主题
How to query a tree[转载] Can anyone interpret this simple SQL?
recursive query help急,SQL2005, 怎么查过去一小时里run过的所有query?
请问个join的问题Late afternoon 腦不好使
新手请教:为什么这个Query不workA Query question
correlated subquery请教怎么来log duration of a MYSQL procedure?
这2个query哪个快点,为啥[转载] strong SQL skills?
A sql question请求SQL语句
recursive sql?谁给我优化一下把重复的产品下架的SQL
相关话题的讨论汇总
话题: level话题: 36话题: 35话题: select话题: result
进入Database版参与讨论
1 (共1页)
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

1 (共1页)
进入Database版参与讨论
相关主题
谁给我优化一下把重复的产品下架的SQLcorrelated subquery
求思路:如何保存/更新CTE recursive query结果这2个query哪个快点,为啥
这个问题的sql query为什么这样写?A sql question
oracle和XMLrecursive sql?
How to query a tree[转载] Can anyone interpret this simple SQL?
recursive query help急,SQL2005, 怎么查过去一小时里run过的所有query?
请问个join的问题Late afternoon 腦不好使
新手请教:为什么这个Query不workA Query question
相关话题的讨论汇总
话题: level话题: 36话题: 35话题: select话题: result