通过子类id获取父类名称的sql语句
时间: 2023-06-07 07:09:31 浏览: 149
这个问题属于技术类问题,可以回答。获取父类名称的 SQL 可以使用下面的语句:
SELECT parent_class.name
FROM parent_class
JOIN child_class ON parent_class.id = child_class.parent_id
WHERE child_class.id = [子类id]
相关问题
有个postgresql自关联表存储父类子类数据,怎么获取从顶级父类到某个指定子类的路径数据
你可以使用递归查询来获取从顶级父类到指定子类的路径数据。以下是一个示例查询:
```sql
WITH RECURSIVE category_path AS (
-- 选择指定子类
SELECT id, name, parent_id
FROM categories
WHERE id = <指定子类ID>
UNION ALL
-- 递归查询父类
SELECT c.id, c.name, c.parent_id
FROM categories c
JOIN category_path cp ON c.id = cp.parent_id
)
-- 最终查询路径数据
SELECT id, name
FROM category_path
ORDER BY id;
```
在这个查询中,我们使用了一个递归的公共表表达式(RECURSIVE CTE)来获取从指定子类到顶级父类的路径数据。首先,我们选择指定子类作为起始点,然后逐级向上查询父类,直到到达顶级父类。最后,我们按照路径中的ID排序,得到完整的路径数据。
请将`categories`替换为你实际使用的表名,`<指定子类ID>`替换为你要查询的子类的ID。执行以上查询语句,你将会得到从顶级父类到指定子类的路径数据。
如果是已知父类的Id,和最底级子类的name,name支持重名但是同一个父类的子类name不会重名怎么查
如果你已知父类的ID和最底级子类的名称(支持重名),且同一个父类的子类名称不会重复,你可以使用以下查询来获取从父类到指定子类的路径数据:
```sql
WITH RECURSIVE category_path AS (
-- 选择指定子类
SELECT id, name, parent_id, ARRAY[name] AS path
FROM categories
WHERE parent_id = <父类ID> AND name = '<指定子类名称>'
UNION ALL
-- 递归查询父类
SELECT c.id, c.name, c.parent_id, cp.path || c.name
FROM categories c
JOIN category_path cp ON c.parent_id = cp.id
)
-- 最终查询路径数据
SELECT id, unnest(path) AS name
FROM category_path
ORDER BY id;
```
在这个查询中,我们首先选择具有指定父类ID和名称的子类作为起始点。然后,我们使用一个递归的公共表表达式(RECURSIVE CTE)来逐级向上查询父类,直到到达顶级父类。我们通过将子类的名称添加到一个路径数组中来构建完整的路径。
请将 `categories` 替换为你实际使用的表名,`<父类ID>` 替换为你已知的父类的ID,`<指定子类名称>` 替换为你要查询的子类的名称。执行以上查询语句,你将会得到从父类到指定子类的路径数据,其中 `name` 列会显示完整的路径。
阅读全文