好吧,所以我与多个学科的学生有联系。大多数学生仅在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/

10-11 01:40