exists子查询mysql查出最底层叶子节点的方法
MySQL 查出最底层叶子节点的方法可以使用递归查询或者子查询的方式实现。
递归查询的实现方式是基于 WITH RECURSIVE 语句,这个语句可以递归查询 MySQL 中的数据,直到查询到最底层的叶子节点。具体实现可以参考以下示例代码:
WITH RECURSIVE cte (id, parent_id, level) AS (
  SELECT id, parent_id, 0 FROM my_table WHERE parent_id IS NULL
  UNION ALL
  SELECT mt.id, mt.parent_id, cte.level + 1
  FROM my_table mt
  JOIN cte ON mt.parent_id = cte.id
)
SELECT *
FROM cte
WHERE NOT EXISTS (
  SELECT 1 FROM my_table WHERE parent_id = cte.id
);
上述代码中,首先查询 parent_id 为空的记录作为递归的起点,然后通过 UNION ALL 语句连接子查询,将每一层的记录递归出来,并计算层级 level。最后通过 NOT EXISTS 子查询排除有下级的记录,筛选出最底层的叶子节点。
另外,也可以使用子查询方式实现,具体实现代码如下:
SELECT * FROM my_table
WHERE NOT EXISTS (
  SELECT 1 FROM my_table t1 WHERE t1.parent_id = my_table.id
);
上述代码中,使用子查询筛选出没有下级节点的记录,即为最底层叶子节点。