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

如何编写SQL递归查询树形层级数据表以获取指定国家或州下的所有城市

地理层级递归查询SQL实现

前提说明

假设你的层级数据表名为 geo_hierarchy,以下语句兼容MySQL 8.0+、PostgreSQL、SQL Server等支持递归CTE的主流数据库。

通用递归查询语句

WITH RECURSIVE geo_cte AS (
    -- 锚点:查询指定的州,同时关联获取对应的国家信息
    SELECT 
        c.Name AS Country,
        s.Name AS state,
        s.Id AS state_id,
        s.Name AS current_name,
        s.Id AS current_id,
        s.Type AS current_type
    FROM geo_hierarchy s
    JOIN geo_hierarchy c ON s.ParentId = c.Id AND c.Type = 'country'
    WHERE s.Name = 'NY' -- 此处可替换为目标州名,也可修改为s.Id = 2按ID查询
    UNION ALL
    -- 递归部分:遍历州的所有子节点
    SELECT 
        g.Country,
        g.state,
        g.state_id,
        t.Name AS current_name,
        t.Id AS current_id,
        t.Type AS current_type
    FROM geo_cte g
    JOIN geo_hierarchy t ON t.ParentId = g.current_id
)
-- 最终筛选出类型为城市的结果
SELECT 
    Country,
    state,
    current_name AS city
FROM geo_cte
WHERE current_type = 'city';

三级结构简化写法(无需递归)

如果你的数据固定为「国家-州-城市」三级,不需要支持更深层级,可直接用多表自连接实现,兼容所有数据库版本:

SELECT 
    c.Name AS Country,
    s.Name AS state,
    city.Name AS city
FROM geo_hierarchy s
JOIN geo_hierarchy c ON s.ParentId = c.Id AND c.Type = 'country'
JOIN geo_hierarchy city ON city.ParentId = s.Id AND city.Type = 'city'
WHERE s.Name = 'NY'; -- 替换为目标州的查询条件

查询结果示例

运行上述查询(以查询NY州为例),返回结果如下:

Countrystatecity
USNYNYC
USNYYonkers

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:30:04