好的,我有一个就读多个科目的学生的关系。大多数学生只注册了一年,要么是 2015 年,要么是 2016 年,但我有一个学生是从 2015 年开始注册的科目,但也有一些是 2016 年注册的。我希望能够显示仅在 2015 年注册的学生。然而,当我执行 SELECT 语句时,我还捕获了 2016 年也做过该科目的一名学生。主题代码包括主题完成的年份。
注册关系中的一些数据:
代码:
SELECT s.firstName, d.degreeCode
FROM students s, degrees d, enrolled e
WHERE s.studentID = d.studentID AND s.studentID = e.studentID AND e.subjectCode NOT LIKE '_______16__'
GROUP BY firstName;
因此,我获取了 15 年级学习的所有学生,但我不希望结果表中包含 s3,因为他也在 2016 年学习。
最佳答案
一种方法使用聚合来断言给定学生的学科代码仅出现在一年内。
SELECT s.firstName, d.degreeCode
FROM students s
INNER JOIN degrees d
ON s.studentID = d.studentID
INNER JOIN ENTROLLED e
s.studentID = e.studentID
WHERE
SUBSTRING(e.subjectCode, 8, 2)) = '15' AND
s.studentID NOT IN (
SELECT d.studentID
FROM degrees d
INNER JOIN enrolled e
ON d.studentID = e.studentID
GROUP BY d.studentID
HAVING COUNT(DISTINCT SUBSTRING(e.subjectCode, 8, 2)) > 1
);
关于mysql - 如何限制 SELECT 查询中的某些记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205975/