You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用递归CTE编写SQL查询未知层级的汽车全部零部件清单

递归CTE实现多级零部件查询方案

首先我们先明确递归CTE的核心结构,它由锚点查询和递归查询两部分组成,锚点负责定位递归的起点,递归部分负责循环关联获取下级子部件,直到没有匹配的子节点自动终止。
假设你的表名为car_components,对应列名分别为main_id、name、c_id、component,可以直接使用下面的查询语句:

WITH RECURSIVE component_list AS (
    -- 锚点查询:取最顶层(Car所属)的一级部件作为递归起点
    SELECT component, c_id
    FROM car_components
    WHERE main_id = 1 -- 对应Car的main ID
    
    UNION ALL
    
    -- 递归查询:关联原表获取当前部件的下级子部件
    SELECT cc.component, cc.c_id
    FROM car_components cc
    INNER JOIN component_list cl ON cc.main_id = cl.c_id
)
-- 最终提取所有零部件名称
SELECT component AS Components
FROM component_list;

逻辑说明

  • 锚点查询首先会拿到Engine、Transmission、Body三个一级部件
  • 递归查询每次会用上一轮查询得到的部件ID(c_id)匹配原表的main_id,比如第一轮递归用Engine的c_id=11匹配到它的三个子部件Crankshaft、Piston、Valve,用Transmission的c_id=12匹配到它的三个子部件,Body没有对应子部件就不会返回新数据
  • 当递归查询没有新的匹配结果时,整个递归自动终止
    查询返回的结果和你期望的零部件清单完全一致。

内容的提问来源于stack exchange,提问作者MrJack0209

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:36:05