递归SQL没有索引

时间:2014-05-16 13:35:28

标签: sql recursion

我有一份已经整理(多年)的Excel序列号列表。

当我们生产一件商品时,我们会给它一个唯一的(当天)序列号并发货 该项目将被退回,我们将对其进行翻新,并应用新的序列号。

每次记录旧序列并且新序列同时记录在每天新的Excel表格中时,项目可以返回数百次。

我需要找到翻新 - >返回所有可能项目的历史记录。

所以我已将表格导入MS SQL 2K8:日期,旧序列(x),新序列(y)

我可以使用PHP实时搜索序列x(如果找到),记录它,使搜索x参数== y并继续搜索直到找不到更多记录。

但我确信有一种方法可以单独使用SQL语句获取列表。但我很难过 - 任何线索?

1 个答案:

答案 0 :(得分:3)

使用递归CTE。获取所有"新序列号"在旧的之后:

with cte as (
      select s.oldserial, s.newserial
      from serials s
      where oldserial = @x
      union all
      select s.oldserial, s.newserial
      from serials s join
           cte
           on s.newserial = cte.oldserial
    )
select *
from cte;

要获取前任,请将on条件更改为cte.newserial = s.oldserial