2013-07-11 28 views
2

我在生成此问题的查询时遇到问题。用于查找共享完全相同的一组值的对的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数据库。 谢谢!

+0

好吧,这仅仅是一个野建议,但也许你可以试试'join'表和自身之间,就好像它是另一个表? – Ariane

回答

3
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) 
+2

+1如果您将GROUP_CONCAT()条款移到HAVING子句中。你不能在WHERE子句中分组函数。 –

+0

好点感谢 – noz

+0

太棒了!从来不知道group_concat()函数。这正是我陷入困境的地方。谢谢! :) – hebime

1

将表加入自己,选择一个员工名称大于另一个,并且任务相等。

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 

希望你有一个真正的PK,或者这只是一个示例练习。这在生产环境中并不好,因为employee_name不会唯一标识大多数公司/系统中的员工。

相关问题