SQL Server 2008中的递归查询

西方

我有这张桌子

MyTable

rowNew  rowOld

1 ------- 2

2 ------- 3

3 ------- 4

4 ------- 5

7 ------- 8

8 ------- 9

我想选择这样的查询:

rowNew  rowOld

1 ------- 2

2 ------- 3

3 ------- 4

4 ------- 5

我用CTE写的

with cte(rowNew, rowOld)
as
(
select rowNew, rowOld from MyTable
union all
select rowNew, rowOld from MyTable
inner join cte on MyTable.rowOld = cte.rowNew
)
select rowNew, rowOld from cte
where cte.rowNew = 1

我得到了以下记录:

rowNew  rowOld

1 ------- 2

1 ------- 2

1 ------- 2

1 ------- 2

他怎么了

西蒙

您将where条件放在错误的位置-它应该在CTE定义的定位查询中,以限制起点。

另外,如果要定义父子关系,则具有相反的加入条件。

这应该是:

with cte(rowNew, rowOld)
as
(
select rowNew, rowOld from MyTable
where rowNew = 1
union all
select MyTable.rowNew, MyTable.rowOld from MyTable
inner join cte on MyTable.rowNew = cte.rowOld
)
select rowNew, rowOld from cte

SQL Fiddle演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

加快SQL Server 2008插入查询的速度

来自分类Dev

递归SQL查询以使子项在父项下获得-SQL Server 2008

来自分类Dev

查询以更改SQL Server 2008中的表排序规则

来自分类Dev

在SQL Server 2008 R2中查询复杂的XML

来自分类Dev

SQL Server 2008中的减法

来自分类Dev

递归查询中的SQL Server更新

来自分类Dev

递归SQL Server查询4

来自分类Dev

在查询结果中显示表名称;SQL Server 2008

来自分类Dev

SQL Server:递归查询

来自分类Dev

SQL Server 2008中的递归

来自分类Dev

如何从查询结果中删除“ NULL” SQL Server 2008

来自分类Dev

如何在SQL Server 2008查询中显示订单履行

来自分类Dev

SQL Server中的递归CTE查询

来自分类Dev

如何在SQL Server 2008中编写此查询

来自分类Dev

使用查询在SQL Server 2008中插入5000条记录

来自分类Dev

从SQL Server 2008中的数组创建动态查询列表

来自分类Dev

在SQL Server 2008中订购

来自分类Dev

子查询在SQL SErver 2008中返回了多个值

来自分类Dev

SQL Server中的查询

来自分类Dev

在SQL Server 2008中运行查询时,列名无效

来自分类Dev

如何在SQL Server 2008中编写此查询?

来自分类Dev

SQL Server 2008 R2:递归查询

来自分类Dev

执行递归SQL查询(SQL Server 2005)

来自分类Dev

如何从查询结果中删除“ NULL” SQL Server 2008

来自分类Dev

分钟在SQL Server 2008查询中为hh:mm格式

来自分类Dev

SQL Server 2008中的递归触发器

来自分类Dev

SQL Server 2008 patindex递归

来自分类Dev

SQL Server 递归查询的限制

来自分类Dev

SQL Server 中的递归查询和所有子项