我已经能够将其缩小到适当的对,但是我完全不知道如何过滤最后一部分。以下内容将其范围缩小了一点,但仍然包含一对一起注册的班级(其中一名雇员是老师,但碰巧又被带回了另一名雇员而注册了班级):

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/

10-09 04:53