You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何根据传入的父ID参数获取关联的子记录名称?

层级关系示意图

问题描述

基于上述层级关系场景,请问通过传入的父级ID参数,获取关联子级名称的最优方法是什么?

示例:

  • 传入父级ID为1,需返回对应的子级名称:Emily、Alexander和Sophia
  • 传入父级ID为7,需返回对应的子级名称:Olivia和James

最优解决方案

根据数据存储的不同场景,最优方法分为以下两种:

1. 数据库存储场景:直接SQL条件查询

如果数据存储在关系型数据库(如MySQL、PostgreSQL)中,假设表结构包含id(主键)、name(子级名称)、parent_id(关联父级ID)字段,直接执行精准条件查询是性能最优的方式:

SELECT name FROM users WHERE parent_id = ?;

将占位符?替换为传入的父级ID,查询结果直接提取name字段即可得到子级名称列表。

若需要直接输出示例中的拼接格式,可使用数据库聚合函数:

  • MySQL:
SELECT GROUP_CONCAT(name SEPARATOR '、') AS child_names FROM users WHERE parent_id = ?;
  • PostgreSQL:
SELECT STRING_AGG(name, '、') AS child_names FROM users WHERE parent_id = ?;

2. 内存数据场景:预构建哈希映射

如果数据已加载到内存(如数组、列表),提前按parent_id构建哈希映射(字典),可实现O(1)时间复杂度的查询,适合多次查询的场景:

预构建映射(仅执行一次)

以Python为例:

# 假设原始数据结构
user_list = [
    {"id": 1, "name": "John", "parent_id": None},
    {"id": 2, "name": "Emily", "parent_id": 1},
    {"id": 3, "name": "Alexander", "parent_id": 1},
    {"id": 4, "name": "Sophia", "parent_id": 1},
    {"id": 7, "name": "Michael", "parent_id": None},
    {"id": 8, "name": "Olivia", "parent_id": 7},
    {"id": 9, "name": "James", "parent_id": 7}
]

# 构建父ID到子名称列表的映射
parent_child_map = {}
for user in user_list:
    pid = user["parent_id"]
    if pid not in parent_child_map:
        parent_child_map[pid] = []
    parent_child_map[pid].append(user["name"])

快速查询

def fetch_child_names(target_parent_id):
    return parent_child_map.get(target_parent_id, [])

# 示例调用
print(fetch_child_names(1))  # 输出: ['Emily', 'Alexander', 'Sophia']
print(fetch_child_names(7))  # 输出: ['Olivia', 'James']

内容的提问来源于stack exchange,提问作者S_A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:05:21