Как решить этот запрос в sql server, используя self join (я так думаю) и не используя подзапросы и вложенные?

#sql-server-2008-r2

#sql-server-2008-r2

Вопрос:

Сотрудники, имеющие одну и ту же ветку, являются коллегами друг друга. Вам нужно написать запрос, который может предоставить вам коллег с EmpID ‘x’, и список коллег не должен включать самого пользователя ‘x’. Например: — Если x = 4, то результат должен быть EmpID 1 и 5.

Примечание: — Вы должны сделать это, используя только один запрос. Никакие вложенные запросы или подзапросы не разрешены.
это таблица вышеуказанной проблемы

Ответ №1:

 SELECT t1.Id,(t2.Id),t2.branch From Employee as t1 ,Employee as t2 
where  t1.branch=t2.branch and t1.Id != t2.Id 
  

Комментарии:

1. Хотя этот код может дать решение вопроса, лучше добавить контекст относительно того, почему / как это работает. Это может помочь будущим пользователям учиться и в конечном итоге применять эти знания к своему собственному коду. Вы также, вероятно, получите положительные отзывы / отзывы от пользователей, когда будет объяснен код.

Ответ №2:

Вы можете использовать запрос ниже

 SELECT t2.* From [dbo].[EmpTest] as t1 ,[dbo].[EmpTest] as t2 
WHERE t1.EmpId=4 and t1.branch=t2.branch and t2.EmpId<>4

Result:-
EmpId   branch
1        D
5        D
  

Комментарии:

1. Но если я хочу упорядочить данные по всем коллегам для всех филиалов упорядоченно, не записывая empid=4, потому что, если у меня будут данные из 2000 строк, я не буду писать empid = 4 или не буду выбирать empid случайным образом и искать данные.

2. данные, которые я хочу, должны быть для всех упорядоченных ветвей

3. Без предоставления значений empid = x, как запрос идентифицирует вас для удаления из списка коллег? Для порядка вы можете использовать «порядок по t2. branch». Если это не ваш вопрос, пожалуйста, предоставьте некоторые примеры данных и ожидаемый результат.