Получение личных контактных данных сотрудника - PullRequest
0 голосов
/ 12 июня 2019

Я хочу получить номер электронной почты, телефона и мобильного телефона каждого сотрудника.

ContactDetailsType содержит Label, то есть электронную почту, телефон, факс ... и ContactDetails содержит ContactDetailsTypeId (идентификатор 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 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

1 Ответ

1 голос
/ 12 июня 2019

Прямо сейчас ваш подзапрос содержит все контактные данные, вам нужен коррелированный запрос, так что он фильтруется по внешнему запросу.Также будьте осторожны, потому что вы используете один и тот же псевдоним внутри и снаружи.

Это может сработать, но опять же без структуры данных это только предположение.Надеюсь, по крайней мере, дать вам представление о том, что вы должны делать.

   (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, 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...