Как проверить, существует ли только одна запись для определенного идентификатора

Как проверить, существует ли только одна запись для определенного идентификатора

У меня есть две таблицы с именами Tbl_Company и Tbl_Employee. Я получаю сотрудников следующим образом:

SELECT DISTINCT emp.employee_id
FROM Tbl_Company comp
           , Tbl_Employee emp
WHERE 
           emp.company_id = comp.company_id 
           AND emp.company_id = 1234;

Этот запрос возвращает ровно одно значение. Как я могу убедиться, что приведенный выше запрос возвращает ровно одно значение для любого введенного мной comany_id.

Я попытался использовать решения, приведенные в Эта запись не удалась. Есть ли более простой способ сделать это.


person Microsoft DN    schedule 09.06.2015    source источник
comment
какую строку для каждой компании вы хотели бы вернуть?   -  person davegreen100    schedule 09.06.2015
comment
Я хочу получить employee_Id и убедиться, что для company_id должен быть только один employee_id.   -  person Microsoft DN    schedule 09.06.2015
comment
В каждой из ваших компаний работает только один сотрудник? Это не имеет смысла.   -  person Aaron Digulla    schedule 09.06.2015
comment
@AaronDigulla: это просто пример   -  person Microsoft DN    schedule 09.06.2015
comment
поэтому, если вы хотите увидеть, в каких компаниях работает более 1 сотрудника, вам не нужен отдельный, а вместо этого COUNT   -  person davegreen100    schedule 09.06.2015
comment
Что вы хотите, чтобы произошло, когда есть несколько сотрудников? Должен ли запрос завершиться ошибкой? Вернуть более одной строки? Выбрать кого-то из сотрудников наугад? ... о, подождите, Microsoft. Случайно, конечно! С вероятностью 12,7436348% синего экрана. Я такой глупый.   -  person Aaron Digulla    schedule 09.06.2015
comment
@AaronDigulla Запрос должен завершиться ошибкой, если для company_id есть несколько результатов.   -  person Microsoft DN    schedule 09.06.2015
comment
@microsoft, запрос не может завершиться ошибкой, вы не можете сделать запрос неудачным только потому, что вам не нравятся данные. Конечно, вы хотели бы знать о данных, которые противоречат вашим бизнес-правилам, чтобы вы могли это исправить.   -  person davegreen100    schedule 09.06.2015
comment
@ davegreen100 Я могу использовать этот запрос несколько раз в разных местах, даже в качестве ПОДЗАПРОСА. Кроме того, это всего лишь пример запроса, который я написал, чтобы получить исходное решение, которое огромно.   -  person Microsoft DN    schedule 09.06.2015
comment
я бы написал запрос для ПОДСЧЁТА количества сотрудников в компании (таким образом, GROUP BY для компании), вы также можете использовать HAVING › 1, чтобы определить тех, кто нуждается в действии.   -  person davegreen100    schedule 09.06.2015


Ответы (3)


это вернет одну строку на компанию

SELECT comp.companyid, max(emp.employee_id) lastEmployeeID
FROM Tbl_Company comp
           , Tbl_Employee emp
WHERE 
           emp.company_id = comp.company_id 
           AND emp.company_id = 1234
GROUP BY comp.companyid
person davegreen100    schedule 09.06.2015
comment
Пожалуйста, объясните, что вы сделали. - person Aaron Digulla; 09.06.2015
comment
исходный запрос выбрал идентификатор DISTINCT из всех компаний, я показал один идентификатор для каждой компании, включив идентификатор компании в выбор и группу. Я изо всех сил пытаюсь увидеть вескую причину для запроса. - person davegreen100; 09.06.2015

следующий запрос прост и гибок. он вернет список всех сотрудников, которые являются единственными в своих компаниях (возвращается с полной информацией о сотрудниках).

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

SELECT emp.*
FROM Tbl_Company comp
           /*, Tbl_Employee emp*/
WHERE (emp.company_id , 1) in (select t.company_id, count(t.employee_id) from Tbl_Company t )
  --AND emp.company_id = 1111 /*filter conditions on company_id*/
  --AND emp.employee_id = 1234/*filter conditions on employee_id*/;
person Eng. Samer T    schedule 09.06.2015

Я решил это, используя ответ @davegreen100 в комментарии.

SELECT comp.companyid, count(distinct emp.employee_id), 
FROM Tbl_Company comp
           , Tbl_Employee emp
WHERE 
           emp.company_id = comp.company_id 
           AND emp.company_id = 1234
GROUP BY comp.companyid

Это даст мне количество сотрудников на компанию

person Microsoft DN    schedule 09.06.2015
comment
ваш COUNT(DISTINCT) неверный, он должен подсчитывать employee_id, а не companyid - person davegreen100; 09.06.2015
comment
... или вы можете использовать count(*) - person David Aldridge; 09.06.2015
comment
comp.employeeId -- идентификатор сотрудника является столбцом в таблице компании? - person David Aldridge; 09.06.2015
comment
@DavidAldridge Ответ отредактирован - person Microsoft DN; 11.06.2015