好吧,所以我与多个学科的学生有联系。大多数学生仅在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 - mysql-如何限制SELECT查询中的某些记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56205975/