可以使用递归的方式查询。首先,使用一个递归的公用表达式(CTE)来获取给定位置的所有父位置,并将它们按层次结构排序。接下来,从该结果集中选择特定层级的父位置。
代码示例:
WITH RECURSIVE location_tree AS ( SELECT id, name, parent_id, 1 as level FROM locations WHERE id = :location_id
UNION ALL
SELECT l.id, l.name, l.parent_id, lt.level + 1 FROM locations l JOIN location_tree lt ON l.id = lt.parent_id ) SELECT id, name FROM location_tree WHERE level = :level_to_return ORDER BY level DESC;
其中,:location_id 为给定位置的ID,:level_to_return 为要返回的父位置的层级。