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

如何在C#中实现SQL Server多表关联查询?

解决方案

场景1:收集所有表的LEADER值及对应表名

如果你的需求是把16张表中所有的LEADER值和它们所属的表名全部列出来,不需要做关联过滤,用UNION ALL是最直接的方式:

SELECT 'GroupLeaders' AS 所属表名, LEADER FROM GroupLeaders
UNION ALL
SELECT 'Account' AS 所属表名, LEADER FROM Account
UNION ALL
SELECT 'Engineers' AS 所属表名, LEADER FROM Engineers
-- 把剩下的13张表按同样格式添加进来

注意点:

  • 确保所有表的LEADER列数据类型一致,要是有差异,用CAST(LEADER AS VARCHAR(50))这类语句统一类型,避免报错。
  • 用UNION ALL而不是UNION,因为UNION会自动去重,如果你需要保留重复值就用前者,效率也更高。

场景2:基于LEADER关联所有表(类似你的示例代码)

如果需要像示例那样,把所有表通过LEADER字段关联起来展示相关数据,得先明确每张表之间的关联逻辑(比如示例里是GroupLeaders.id = Account.Leader),然后扩展JOIN语句:

修正后的示例SQL(原SQL未关联Engineers,属于笔误):

SELECT 
    GroupLeaders.ID,
    Account.Leader AS Account_Leader,
    Engineers.Leader AS Engineers_Leader
    -- 依次添加其他13张表的LEADER字段,比如 TableX.Leader AS TableX_Leader
FROM GroupLeaders
INNER JOIN Account ON GroupLeaders.id = Account.Leader
INNER JOIN Engineers ON GroupLeaders.id = Engineers.Leader
-- 继续添加其他表的JOIN条件,比如 INNER JOIN TableX ON GroupLeaders.id = TableX.Leader

对应的C#代码(中文说明版):

// 创建SQL命令对象,执行多表关联查询
SqlCommand cmd = new SqlCommand(
    "SELECT GroupLeaders.ID, Account.Leader, Engineers.Leader " +
    "FROM GroupLeaders INNER JOIN Account ON GroupLeaders.id = Account.Leader " +
    "INNER JOIN Engineers ON GroupLeaders.id = Engineers.Leader", 
    conn // conn是已初始化并打开的数据库连接对象
);

注意点:

  • 用INNER JOIN会过滤掉没有匹配关联条件的记录,如果想保留所有表的记录,改用LEFT JOIN或者FULL OUTER JOIN。
  • 16张表关联时要注意查询性能,必要时给LEADER、关联字段添加索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:25:18