我有这张桌子
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句