不知道从哪里开始。我继承了一个表,其中包含一个活动和非活动的部件号列表。如果部件号无效,则输入下一个有效部件号。如果部件号处于活动状态,则没有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'
答案 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;
相同的查询适用于大多数RDBMS,除了MySQL。