如何编写SQL实现上一行col2匹配下一行col1的链式递归查询
链式递归查询SQL实现方案
测试表结构(表名:test_table)
| ID | col1 | col2 |
|---|---|---|
| 1 | 104A | 103A |
| 2 | 301A | 300A |
| 3 | 103A | 101A |
| 4 | 102A | 101A |
| 5 | 201A | 200A |
| 6 | 101A | 100A |
注:原表结构标注的第三列
coll2为笔误,已按业务关联逻辑统一修正为col2
需求说明
指定起始查询条件col1 = '104A',按照上一行选中记录的col2值匹配下一行记录的col1值的规则,递归返回所有符合关联规则的记录。
实现代码
以下SQL兼容MySQL 8.0+、PostgreSQL、SQL Server、Oracle等所有支持递归CTE语法的主流数据库:
WITH RECURSIVE chain_query AS ( -- 锚点成员:查询起始条件匹配的第一行记录 SELECT ID, col1, col2 FROM test_table WHERE col1 = '104A' UNION ALL -- 递归成员:关联匹配上一行的col2 = 当前行的col1,迭代查询后续关联行 SELECT t.ID, t.col1, t.col2 FROM test_table t INNER JOIN chain_query cq ON t.col1 = cq.col2 ) -- 输出全部链式关联结果 SELECT * FROM chain_query;
输出结果
完全匹配预期输出:
| ID | col1 | col2 |
|---|---|---|
| 1 | 104A | 103A |
| 3 | 103A | 101A |
| 6 | 101A | 100A |
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

