假设你的表结构和数据如下:
t_xzqh_code
id pid
520000 null
520100 520000
520102 520100
520200 520000
520202 520200
你可以使用递归的 SQL 查询,如下:
WITH RECURSIVE region_hierarchy AS (
SELECT id, pid
FROM t_xzqh_code
WHERE id = 520000
UNION ALL
SELECT t.id, t.pid
FROM t_xzqh_code t
INNER JOIN region_hierarchy rh ON t.pid = rh.id
)
SELECT * FROM region_hierarchy;
这个 SQL 查询首先在 WITH RECURSIVE 子句中定义了一个递归的表 region_hierarchy。这个表首先包含了行政代码为 520000 的行,然后在 UNION ALL 子句中,将 t_xzqh_code 表中父 ID 为 region_hierarchy 中已有 ID 的所有行加入到 region_hierarchy 中。这个过程会一直重复,直到 t_xzqh_code 表中没有更多的行可以加入到 region_hierarchy 中。最后,查询返回 region_hierarchy 中的所有行,这些行就是行政代码为 520000 的所有子区域。
注意:这种递归查询方式在 MySQL 8.0 及以上版本,以及其他一些数据库系统(如 PostgreSQL,SQL Server)中可用。如果你的 MySQL 版本低于 8.0,你可能需要使用其他方式来实现这个查询,例如使用存储过程或者在应用程序中进行多次查询。