我仍在探索SQL,因此我有一个显而易见的问题。 我在SQL Server 2008 R2中有下表。 如您所见,这是一个映射表,其中InstrumentID和ProductID之间存在“多对多”关系:
|InstrumentID | ProductID |ID(PK)|
|-------------|-------------|------|
|10 |21 |0 |
|10 |22 |1 |
|11 |22 |2 |
|11 |23 |3 |
|12 |24 |4 |
|12 |25 |5 |
|----------------------------------|
我希望编写一个查询/ SP作为输入,让我们说一个InstrumentID,并返回递归提取的所有相关映射。 例如,假设我提供了InstrumentID = 10.那么,令人满意的结果将是:
|InstrumentID | ProductID |ID(PK)|
|-------------|-------------|------|
|10 |21 |0 |
|10 |22 |1 |
|11 |22 |2 |
|11 |23 |3 |
|----------------------------------|
实现这一目标的最佳方法是什么? 一个例子肯定是有用的。
我使用CTE尝试了以下查询:
WITH Map
AS (
-- Anchor
SELECT InstrumentID, ProductID
FROM InstrumentProduct
WHERE InstrumentID IN (10)
UNION ALL
-- Recursive
SELECT IP.InstrumentID, IP.ProductID
FROM InstrumentProduct IP
INNER JOIN Map
ON IP.InstrumentID = Map.InstrumentID
OR IP.ProductID = Map.ProductID
)
SELECT *
FROM Map
OPTION (MAXRECURSION 50);
但执行查询时出现错误:“语句已终止。最大递归5在语句完成之前已用尽。” 然而,结果显然是正确的,但重复。
任何形式的帮助和建议肯定都有帮助。 谢谢!