我已经能够将范围缩小到适当的对,但我完全不知道如何过滤最后部分。下面的内容稍微缩小了范围,但仍然包含一对一起注册一个类(class)的人(其中一个员工是老师,但碰巧与返回的其他员工一起注册了一个类(class)):
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、Grade
CR - 类(class)信息,包含字段 Cnum、Title、DEPT、Teacher_ID(与 EM.ID 匹配)
粗体字段为主键
结果应如下所示:
ID | ID
---------
E1 E2
E10 E2
如果两名员工来自同一城市或更多城市,则两人中的第一位员工将参加另一位员工的类(class)。 除非我最终得到
ID | ID
---------
E1 E2
E10 E2
E14 E2
我收到一对来自同一城市的员工(E14 和 E2),但第二名员工并没有教第一名员工,他们只是碰巧和学生在同一个类(class)。
最佳答案
编辑简化并转储派生表。
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
这将为您提供居住在同一城市的某门类(class)的所有员工和教师对。这里有 DISTINCT,以防它们实际上同时在两门类(class)中。
注意 E3 和 E12 以及 E4 和 E13 也是匹配项,但它们未在您的示例结果中列出。
关于mysql - SQL - 为同一城市的员工获取配对,并且配对中的第一个员工参加了第二个员工教授的类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39679215/