您好,我有以下数据库架构
Professor (EMP ID,Name,Status,Salary,Age)
Course(Course ID,Course Name,PoINts)
Works(Course ID,EMP ID,Class ID)
我已编写以下查询来返回已教授类(class) M1 或 M2 但不是两者的员工列表
SELECT p.empid,p.name
FROM professor p,course c,works w
WHERE p.empid = w.empid
AND w.courseid = c.courseid
AND ((c.coursename = ‘m1’ AND c.coursename != ‘m2’)
OR
(c.coursename = ‘m2’ AND c.coursename != ‘m1’))
上面的查询正确吗,因为我是 SQL 新手,请帮忙
最佳答案
这个问题通常被称为关系划分
。下面的查询的作用是获取教授 m1
和 m2
等类(class)的所有教授的姓名。过滤掉教授后,它会计算不同的 CourseName
的数量。显然,如果只教授一门类(class),它将返回 1 :D
。
SELECT a.EmpID, a.Name
FROM Professor a
INNER JOIN Works b
ON a.EmpID = b.EmpID
INNER JOIN Course c
ON b.CourseID = c.CourseID
WHERE c.CourseName IN ('m1', 'm2')
GROUP BY a.EmpID, a.Name
HAVING COUNT(DISTINCT c.CourseName) = 1
关于mysql - SQL查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15332145/