SQL Server中如何将父表与子表数据合并显示在单列?
实现成员与亲属信息的合并显示(SQL Server)
嘿,我来帮你搞定这个需求!要实现「成员在前、亲属紧跟,无亲属则只显示成员」的效果,咱们可以用联合查询+自定义排序字段的方案来实现,思路很清晰,下面给你详细拆解:
先明确表结构(基于你的描述补充合理关联字段)
假设你的两张表是这样的:
- 成员表
Members:包含字段Regid(唯一标识,用来关联亲属表)、Name(成员姓名)、City(成员所在城市) - 亲属表
MemberRelatives:包含字段Regid(关联成员表的Regid)、RelativeName(亲属姓名)
核心SQL语句
-- 第一步:查询所有成员信息,标记为「第一优先级」(排在前面) SELECT Regid, Name AS DisplayName, -- 统一用DisplayName列来显示成员/亲属姓名 City, 1 AS SortOrder -- 排序标记:成员排1,亲属排2 FROM Members UNION ALL -- 用UNION ALL合并结果,比UNION效率更高(无需去重) -- 第二步:查询所有亲属信息,关联成员表获取对应城市,标记为「第二优先级」 SELECT m.Regid, mr.RelativeName AS DisplayName, m.City, 2 AS SortOrder FROM Members m INNER JOIN MemberRelatives mr ON m.Regid = mr.Regid -- 关键排序:先按成员Regid分组,再按SortOrder排序,保证成员在前、亲属紧跟 ORDER BY Regid, SortOrder;
效果说明
- 对于有亲属的成员:成员的行会排在最前面,紧接着显示该成员的所有亲属行
- 对于无亲属的成员:因为亲属表中没有对应Regid的记录,所以只会显示成员自己的行
- 如果不需要显示
City字段,直接把SELECT语句里的City去掉就行,完全不影响核心逻辑
举个实际数据的例子:
假设成员表数据:
| Regid | Name | City |
|---|---|---|
| 1 | 张三 | 北京 |
| 2 | 李四 | 上海 |
亲属表数据:
| Regid | RelativeName |
|---|---|
| 1 | 张小三 |
| 1 | 张妈妈 |
最终查询结果会是:
| Regid | DisplayName | City | SortOrder |
|---|---|---|---|
| 1 | 张三 | 北京 | 1 |
| 1 | 张小三 | 北京 | 2 |
| 1 | 张妈妈 | 北京 | 2 |
| 2 | 李四 | 上海 | 1 |
完美符合你的需求!
内容的提问来源于stack exchange,提问作者shah harshil
相关产品推荐
相关产品推荐

