SQL-запрос для поиска пар, которые имеют одинаковый набор значений

У меня возникли проблемы при создании запроса для этой проблемы.

У меня есть этот маленький столик

Tasks(employee_name, task)

Sample Data:
Tasks
------------------
Joe | taskA
Joe | taskB
Ted | taskA
Jim | taskB
Ray | taskA
Ray | taskB
John| taskA
Tim | taskC

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

Например, используя данные выше, набор результатов должен быть:

---------------------
employee1 | employee2
---------------------
  Joe     | Ray
  Ted     | John

Я использую MySQL для базы данных. Спасибо!

2 ответа

Решение
select a.employee_name,b.employee_name
from tasks as a, tasks as b
where a.employee_name>b.employee_name
group by a.employee_name,b.employee_name
having group_concat(distinct a.task order by a.task)=group_concat(distinct b.task order by b.task)

Соедините таблицу с самим собой, выберите одно имя сотрудника, чтобы оно было больше другого, и где задачи были равны.

select emp1.employee_name, emp2.employee_name, emp1.task
from tasks emp1
inner join task emp2
on emp1.employee_name > emp2.employee_name
and emp1.task = emp2.task

Надеюсь, у вас есть РЕАЛЬНЫЙ ПК, или это всего лишь пример упражнения. Это не было бы хорошо в производственной среде, так как employee_name не собирается однозначно идентифицировать сотрудника в большинстве компаний / систем.

Другие вопросы по тегам