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 не собирается однозначно идентифицировать сотрудника в большинстве компаний / систем.