【发布时间】:2017-02-02 09:40:04
【问题描述】:
我已经能够将其缩小到适当的对,但我完全不知道如何过滤最终部分。以下将范围缩小了一点,但仍然包含一对一起参加课程的人(其中一名员工是老师,但恰好与正在返回的其他员工一起参加课程):
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 - 包含字段 Cnum、Title、DEPT、Teacher_ID(匹配 EM.ID)的课程信息
粗体字段为主键
结果应如下所示:
ID | ID
---------
E1 E2
E10 E2
如果两个员工都来自同一个城市或多个城市,则该对中的第一个员工会从该对中的第二个员工那里学习课程。 除了我结束了
ID | ID
---------
E1 E2
E10 E2
E14 E2
我得到了一对来自同一个城市的员工(E14 和 E2),但第二个员工没有教第一个员工,他们只是碰巧和学生在同一个班级。
【问题讨论】:
-
从不在
FROM子句中使用逗号。 始终使用明确的JOIN语法。 -
能否提供一些你想要的小测试数据和输出