SQL Server:对匹配产品进行分组的递归查询
在名为“matches”的关系数据库表中,每条记录代表两个之间的匹配产品。目标是创建一个“组”表,以分层结构捕获这些匹配项。具体来说,“group_ID”列应存储属于同一组的最小产品 ID。
为了实现这一点,我们可以利用 SQL 中递归查询的功能。递归查询对同一数据执行多轮操作。下面是一个使用公共表表达式 (CTE) 来跟踪递归操作的解决方案:
WITH CTE AS ( SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL UNION ALL SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID ) SELECT * FROM CTE ORDER BY Group_ID
递归的基本情况是当产品没有匹配项时,在这种情况下它会形成自己的组。这是在 CTE 的第一部分中捕获的。
SELECT DISTINCT M1.Product_ID AS Group_ID, M1.Product_ID FROM matches M1 LEFT JOIN matches M2 ON M1.Product_Id = M2.matching_Product_Id WHERE M2.matching_Product_Id IS NULL
CTE 的递归部分查找每个组的所有匹配产品。它会迭代地将这些匹配的产品添加到组中。
SELECT C.Group_ID, M.matching_Product_Id FROM CTE C JOIN matches M ON C.Product_ID = M.Product_ID
最后,我们可以通过按“Group_ID”列对 CTE 进行排序来按层次顺序检索结果。
SELECT * FROM CTE ORDER BY Group_ID
这递归查询有效地在“groups”表中生成所需的产品分组。层次关系由“group_ID”列捕获,确保每一行反映不同的产品组。
通过利用 SQL Server 的递归功能,我们可以高效地提取复杂的层次结构模式和复杂的组相关数据。数据库结构。
以上是如何使用递归查询在 SQL Server 中对匹配产品进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!