mysql - SQL - 为同一城市的员工获取配对,并且配对中的第一个员工参加了第二个员工教授的类(class)

标签 mysql sql

我已经能够将范围缩小到适当的对,但我完全不知道如何过滤最后部分。下面的内容稍微缩小了范围,但仍然包含一对一起注册一个类(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 - 员工注册,包含字段 CnumID、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/

相关文章:

mysql - 条件(哪里)mysql

mysql - SQL 存储过程获取用户对象,然后更新该对象的值

PHP 和 MySQL Web 应用程序 - 选择单个字段(与)从表中选择 *

java - 在接口(interface)中存储查询以从数据库获取数据(Selenium webdriver + java)

php - 查询表格并根据其状态求和数据

mysql - 根据用户上次登录日期按国家/地区选择前 2 位用户

python - 查询后可以过滤查询集吗? Django

sql - 为什么即使我更改函数 COUNT() 内的参数,结果总是相同?

mysql - SQL 查询重复结果

mysql - 如何用另一个表中的另一个值更新 mysql 列?