SELECT и JOIN возвращают только одну строку для каждого сотрудника - PullRequest
0 голосов
/ 30 марта 2020

У меня есть пользовательская таблица, в которой хранятся employeeId, lastName, firstName, отдел, дата найма и mostRecentLogin.

У меня есть другая таблица, в которой хранится employeeId, emailAddress.

Таблица emailAddress может иметь несколько строк для сотрудника, если они имеют несколько адресов электронной почты.

Я пытаюсь вернуть результаты, которые показывают только одну строку для каждого сотрудника. Мне все равно, какой адрес электронной почты, только если он выбирает один.

Но все запросы, которые я пробовал, всегда возвращают все возможные строки.

Вот моя последняя попытка:

select *
from EmployeeInfo i
left join EmployeeEmail e ON i.employeeId = e.employeeId
where i.hireDate = 2015 
and employeeId IN (
    SELECT MIN(employeeId)
    FROM EmployeeInfo
    GROUP BY employeeId
)

Но опять же, это возвращает все возможные строки.

Есть ли способ заставить это работать?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Используйте подзапрос вместо объединения:

select *
  , (select top 1 E.EmailAddress from EmplyeeEmail E where E.employeeId = I.employeeId)
from EmployeeInfo I
where I.hireDate = 2015;

Примечание. Если вы передумали и решили, что предпочитаете возвращать адрес электронной почты, просто добавьте order by подзапросу - в противном случае действительно неизвестно, какой из них вы получите.

0 голосов
/ 30 марта 2020

Это должно работать.

SELECT *
FROM EmployeeInfo
Left JOIN EmployeeEmail
  ON EmployeeInfo.employeeId = EmployeeEmail.employeeId
WHERE EmployeeInfo.hireDate = '2015'
GROUP BY EmployeeInfo.employeeId;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...