pg,mysql数据库递归表查询sql,适用于查询多层级的数据

80 阅读1分钟

假设你的表结构和数据如下:

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,你可能需要使用其他方式来实现这个查询,例如使用存储过程或者在应用程序中进行多次查询。