SQL循环遍历表并查找下一部分记录

时间:2014-06-19 17:32:03

标签: sql sql-server-2008

不知道从哪里开始。我继承了一个表,其中包含一个活动和非活动的部件号列表。如果部件号无效,则输入下一个有效部件号。如果部件号处于活动状态,则没有Next PartNumber。他们想要搜索零件编号并找到匹配的所有下一个零件编号。

基本上表格看起来像这样。 PartNumber Varchar(20),Active Varchar(3),NextPartNumber Varchar(20)。

问题是我不知道链中有多少个零件号。以下是数据样本:

100X   No   XYZ
XYZ    No   45A6
45A6   Yes  

QWER   No   RT98
RT98   No   POUL1
POUL1  No   N9HGT
N9HGT  No   FGH12
FGH12  Yes

我可以写一个这样的查询,但由于我不知道有多少部件号,所以这不起作用。

Select A.PartNumber, A.NextPartNumber, B.PartNumber, B.NextPartNumber, C.PartNumber, C.NextPartNumber
FROM tblPartTable as A
inner join
tblPartTable as B
on A.PartNumber = B.NextPartNumber
inner join
tblPartTable as C
on B.PartNumber = C.NextPartNumber
where A.PartNumber = '100X'

1 个答案:

答案 0 :(得分:4)

使用SQL Server(我假设你正在谈论自你早期的问题以来),你可以使用递归公用表表达式轻松获取搜索部分及其所有后继者,没有需要手动循环;

WITH cte AS (
  -- Base condition, where do we start the search?
  SELECT t.* FROM tblPartTable t WHERE t.PartNumber = '100X'
  UNION ALL
  -- Continue condition, how do we find the next part from the current one?
  SELECT t.* FROM tblPartTable t JOIN cte ON t.PartNumber = cte.NextPartNumber
)
SELECT partnumber, active FROM cte;

An SQLfiddle to test with

相同的查询适用于大多数RDBMS,除了MySQL。