获取员工的个人联系方式

时间:2019-06-12 16:45:54

标签: sql sql-server

我想获取每个员工的电子邮件,电话和手机号码。

ContactDetailsType包含Label,即电子邮件,电话,传真... ContactDetails包含ContactDetailsTypeId(ID ContactDetailsType)和Info,具有电话号码的值(例如)。

SELECT Concat(Concat(E.[firstname], ' '), E.[lastname]) AS full_name, 
       (SELECT cc.info 
        FROM   [contactdetails] cc 
               LEFT JOIN [contactdetailstype] cd 
                      ON cd.contactdetailstypeid = cc.contactdetailstypeid 
        WHERE  cd.label = 'Phone')                      AS phone, 
       CDC.label, 
       CDT.label, 
       CD.info 
FROM   [employee] [E] 
       LEFT JOIN [af_adminfile] [AFA] 
              ON E.adminfileid = AFA.adminfileid 
       LEFT JOIN [af_contactdetails] [AFC] 
              ON AFC.adminfileid = AFA.adminfileid 
       LEFT JOIN [contactdetails] [CD] 
              ON CD.contactdetailsid = AFC.contactdetailsid 
       LEFT JOIN [contactdetailscategory] [CDC] 
              ON CDC.contactdetailscateroryid = CD.contactdetailscategoryid 
       LEFT JOIN [contactdetailstype] [CDT] 
              ON CDT.contactdetailstypeid = CD.contactdetailstypeid 

我尝试了以下查询来获取电话,但出现以下错误:

  

子查询返回了多个值。当   子查询遵循=,!=,<,<=,>,> =,或当子查询用作   表达式。

1 个答案:

答案 0 :(得分:1)

现在,您的子查询将提供所有联系方式,您需要一个相关查询,因此可以通过外部查询进行过滤。还要小心,因为您使用的是内部和外部相同的别名。

这可能有效,但是没有数据结构只是一个猜测。希望至少能让您对应该做什么有所了解。

   (SELECT cc.info 
    FROM   [contactdetails] cc 
           LEFT JOIN [contactdetailstype] cdt2
                  ON cdt2.contactdetailstypeid = cc.contactdetailstypeid 
    WHERE  cdt2.label = 'Phone'
      AND cc.contactdetailsid = cd.contactdetailsid -- the id from outside query
   ) AS phone,