递归表SQL查询:查询二级车型数据并保留所属品牌名称
SQL查询实现方案
你仅需要查询两级关联节点(品牌→车型),直接使用自关联查询即可最高效满足需求,写法如下:
SELECT b.NAME AS PARENT_NAME, a.NAME AS NAME FROM LISTS a INNER JOIN LISTS b ON a.FATHER_ID = b.ID WHERE b.FATHER_ID = 101;
逻辑说明:
LISTS b筛选父ID为101的节点,对应所有汽车品牌LISTS a以品牌ID为父ID做关联,对应品牌下的二级车型节点- 直接返回需要的品牌名、车型名字段即可
如果后续需要扩展查询更多层级,可使用递归CTE的通用写法,扩展性更强:
WITH RECURSIVE CAR_HIERARCHY AS ( -- 锚定品牌层级:父ID为101的是一级品牌节点 SELECT ID, FATHER_ID, NAME AS PARENT_NAME, 1 AS LEVEL FROM LISTS WHERE FATHER_ID = 101 UNION ALL -- 递归查询所有子节点 SELECT c.ID, c.FATHER_ID, ch.PARENT_NAME, ch.LEVEL + 1 AS LEVEL FROM LISTS c INNER JOIN CAR_HIERARCHY ch ON c.FATHER_ID = ch.ID ) SELECT PARENT_NAME, NAME FROM CAR_HIERARCHY WHERE LEVEL = 2;
内容的提问来源于stack exchange,提问作者Royce
相关产品推荐
相关产品推荐

