这就是我写它的方式,与比尔写的非常相似,不同之处在于在关系表中 (emp_id, prj_id) 上没有唯一约束的情况下计算不同的项目:
SELECT r1.emp_id, r2.emp_id, COUNT(DISTINCT r1.prj_id) cntProjects
FROM r_emp_prj r1, r_emp_prj r2
WHERE r1.emp_id < r2.emp_id
AND r2.prj_id = r1.prj_id
GROUP BY r1.emp_id, r2.emp_id HAVING COUNT(DISTINCT r1.prj_id) > 1
如果关系表还存储项目中人员的角色(dev、lead、q&a 等),则关系表中可能有多个条目用于相同的 (emp_id, prj_id) 对。
这也会检索名称:
SELECT r1.emp_id, emp1.name,
r2.emp_id, emp2.name,
COUNT(DISTINCT r1.prj_id) cntProjects
FROM r_emp_prj r1, r_emp_prj r2,
emp emp1, emp emp2
WHERE r1.emp_id < r2.emp_id
AND r2.prj_id = r1.prj_id
AND emp1.id = r1.emp_id
AND emp2.id = r2.emp_id
GROUP BY r1.emp_id, emp1.name, r2.emp_id, emp2.name
HAVING COUNT(DISTINCT r1.prj_id) > 1