SQL:在同一列中查找子字符串匹配,构建部件与子部件关联表
部件与子部件关联关系生成方案
需求说明
现有一列存储部件和子部件名称的字符串数据,需生成部件与子部件的关联关系表,规则为:当父部件名称是子部件名称的前缀子串时,二者建立关联(结合数据特征,子部件名称含下划线后缀,以此区分父部件)。
现有数据示例
| 名称 |
|---|
| AAA |
| BBB |
| CCC |
| AAA_1 |
| AAA_2 |
| BBB_1 |
| CCC_3 |
期望结果
| 部件 | 子部件 |
|---|---|
| AAA | AAA_1 |
| AAA | AAA_2 |
| BBB | BBB_1 |
| CCC | CCC_3 |
实现思路(以Python为例)
- 先提取所有父部件:筛选名称中不含下划线的条目
- 匹配对应子部件:遍历每个父部件,在全量名称中筛选以该父部件开头、含下划线且不等于父部件本身的条目
- 整理成关联关系表
代码实现
# 模拟原始数据 names = ["AAA", "BBB", "CCC", "AAA_1", "AAA_2", "BBB_1", "CCC_3"] # 提取父部件列表 parent_parts = [name for name in names if "_" not in name] # 生成关联关系 relation_list = [] for parent in parent_parts: for name in names: if name != parent and name.startswith(parent) and "_" in name: relation_list.append({"部件": parent, "子部件": name}) # 输出结果表 print("| 部件 | 子部件 |") print("|------|--------|") for item in relation_list: print(f"| {item['部件']} | {item['子部件']} |")
补充说明
- 用
startswith替代单纯的子字符串判断,可避免"AA"误匹配"AAA"这类不符合业务逻辑的关联 - 若数据存储在Excel或数据库中,只需调整数据读取和输出逻辑,核心筛选规则保持一致
内容的提问来源于stack exchange,提问作者javierzamb
相关产品推荐
相关产品推荐

