如何在SQL Server中创建自我迭代的条件Select语句

时间:2014-02-27 21:42:26

标签: sql sql-server

如何创建自我迭代查询以从ID连接所有Name的列,找到与传入的id匹配的refID,并重复上述序列。

id  Name    refID 

34  Name1   37

37  Name2   0

253 Name3   34

254 Name4   0

272 Name5   0

273 Name6   0

enter image description here

因此,如果我传入37的初始ID,则吐出应为Name2,(34的{​​{1}}为refID因此,37,(Name1因此253 refID {}} 34Name3没有任何253停止。 refID's

我们也只希望查询开始查看id的refID最初是否为0。

1 个答案:

答案 0 :(得分:2)

我认为您正在寻找递归查询。你得到的东西可以与树形结构相媲美。 如果我理解你的话,你也希望你的结果只有一行。

你在使用什么数据库?据我所知,MySql不支持递归查询。在SQL Server中,您可以使用以下内容实现此目的:

with ref(id, refId, name ) as(
  select id, refId, cast((name + ' ') as varchar(max))
  from test
  where id = 37
  union all
  select t.id, t.refId, cast((r.name + t.name + ' ') as varchar(max))
  from test t
  join ref r 
  on r.id = t.refId
)
select top 1 name from ref
order by len(name) desc

SQL Fiddle

我希望这会有所帮助。 ;)