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

SQL技术问询:关联多表获取员工工作电话信息(非硬编码)

查询员工工作电话信息的SQL方案

针对AdventureWorks2019数据库的需求,这里提供两种符合要求的实现方式,均满足不得硬编码PhoneNumberTypeID的要求:

方法一:多表连接(推荐,可读性更高)

通过INNER JOIN关联三张表,直接过滤所需条件:

SELECT 
    p.FirstName,
    p.LastName,
    pp.PhoneNumber
FROM 
    Person.Person p
INNER JOIN 
    Person.PersonPhone pp ON p.BusinessEntityID = pp.BusinessEntityID
INNER JOIN 
    Person.PhoneNumberType pnt ON pp.PhoneNumberTypeID = pnt.PhoneNumberTypeID
WHERE 
    p.PersonType = 'Employee'
    AND pnt.Name = 'Work';

说明:

  • 利用BusinessEntityID关联人员表和人员电话表,确保获取对应人员的电话数据
  • 通过PhoneNumberTypeID关联电话表和电话类型表,用pnt.Name = 'Work'替代硬编码ID,符合需求
  • INNER JOIN会自动过滤掉没有匹配电话或电话类型的记录,只返回符合所有条件的结果

方法二:子查询方式

如果偏好子查询写法,可以先获取"Work"类型对应的ID,再关联查询:

SELECT 
    p.FirstName,
    p.LastName,
    pp.PhoneNumber
FROM 
    Person.Person p
INNER JOIN 
    Person.PersonPhone pp ON p.BusinessEntityID = pp.BusinessEntityID
WHERE 
    p.PersonType = 'Employee'
    AND pp.PhoneNumberTypeID = (
        SELECT PhoneNumberTypeID 
        FROM Person.PhoneNumberType 
        WHERE Name = 'Work'
    );

说明:

  • 子查询(SELECT PhoneNumberTypeID FROM Person.PhoneNumberType WHERE Name = 'Work')动态获取工作电话的类型ID,避免硬编码
  • 同样通过BusinessEntityID关联人员和电话表,过滤出员工的工作电话

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:35:20