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

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去掉就行,完全不影响核心逻辑

举个实际数据的例子:
假设成员表数据:

RegidNameCity
1张三北京
2李四上海

亲属表数据:

RegidRelativeName
1张小三
1张妈妈

最终查询结果会是:

RegidDisplayNameCitySortOrder
1张三北京1
1张小三北京2
1张妈妈北京2
2李四上海1

完美符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:24:52