SQL Server查询:关联服务表与员工表获取带ID的员工姓名
解决SQL Server多表关联查询需求
嗨,作为SQL Server新手,这种需要关联同一张表多次的场景其实挺典型的,咱们直接上方案就行~
核心思路是多次关联Workers表,每次给它一个不同的别名,这样就能分别匹配Services里的ID_W1、ID_W2、ID_W3,进而取出对应的工人姓名。
完整查询语句
SELECT s.Date, s.Time, s.Service_Name, s.ID_W1, w1.Name AS Name_W1, s.ID_W2, w2.Name AS Name_W2, s.ID_W3, w3.Name AS Name_W3 FROM Services s LEFT JOIN Workers w1 ON s.ID_W1 = w1.ID_W LEFT JOIN Workers w2 ON s.ID_W2 = w2.ID_W LEFT JOIN Workers w3 ON s.ID_W3 = w3.ID_W;
关键细节说明
- 用
LEFT JOIN而不是INNER JOIN:如果Services里的某个ID_W(比如ID_W2)为NULL,或者对应的工人记录在Workers表里不存在,LEFT JOIN会保留这条服务记录,对应的Name_W字段会显示为NULL;如果用INNER JOIN,这条记录会被过滤掉,你可以根据实际需求调整关联类型。 - 表别名的使用:给Workers表分别起别名
w1、w2、w3,是为了区分三次关联的同一个表,避免字段冲突和语法错误。 - 字段别名:通过
AS给工人姓名字段起Name_W1这类别名,正好匹配你需要的结果表字段名。
如果还有其他延伸需求,比如要拼接Name和Last Name成完整姓名,或者要过滤特定日期范围的服务记录,随时提出来就行~
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

