我已经能够将其缩小到适当的对,但是我完全不知道如何过滤最后一部分。以下内容将其范围缩小了一点,但仍然包含一对一起注册的班级(其中一名雇员是老师,但碰巧又被带回了另一名雇员而注册了班级):
select a.ID, b.ID
from EM as a, EM as b, ER, CR
where a.City = b.City and a.ID <> b.ID and a.ID = ER.ID and b.ID =
CR.Teacher_ID and a.ID < b.ID
group by a.ID, b.id;
我有的表是:
EM-员工信息,包括字段ID,城市,名称,部门,薪水
ER-具有字段Cnum,ID,等级的员工注册
CR-具有字段Cnum,Title,DEPT,Teacher_ID(与EM.ID匹配)的课程信息
粗体字段是主键
结果应如下所示:
ID | ID
---------
E1 E2
E10 E2
如果两个员工都来自同一城市或更多城市,则该对中的第一位雇员将接受该对中第二位雇员的培训。
除了我最终
ID | ID
---------
E1 E2
E10 E2
E14 E2
我得到了来自同一城市的一对员工(E14和E2),但第二个员工没有教第一个员工,他们恰好和学生在一起在同一个班级。
最佳答案
编辑简化并转储派生表。
SELECT DISTINCT
em.ID as Employee
,cr.Teacher_Id as Teacher
FROM
EM em
INNER JOIN ER er
ON em.ID = er.ID
INNER JOIN CR cr
ON er.Cnum = cr.Cnum
INNER JOIN EM te
ON cr.Teacher_Id = te.ID
AND em.City = te.City
这将使您住在同一城市的某门课程的所有员工和教师对。 DISTINCT在这里,以防他们实际上一起上2门课。
注意E3和E12以及E4和E13也是匹配项,但它们未在示例结果中列出。
关于mysql - SQL-为同一城市的雇员获取配对,配对中的第一个雇员参加第二个类(class),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39679215/