mysql-如何限制SELECT查询中的某些记录

时间:2019-05-19 08:18:06

标签: mysql mysql-workbench

好的,所以我与多个学科的学生有联系。大多数学生仅在2015年或2016年入学,但我有一个从2015年开始入学的科目,但在2016年也有一些。我希望能够显示仅在2015年入学的学生。但是,当我执行SELECT语句时,我同时也抓住了一位在2016年完成该主题的学生。主题代码包括主题完成的年份。

一些来自已注册关系的数据:

enter image description here

代码:

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年学习。

2 个答案:

答案 0 :(得分:2)

一种方法是使用聚合来断言给定学生的主题代码仅在一年内发生。

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
    );

答案 1 :(得分:0)

您可以检查所有未选中的学生,例如“ _______ 16 __”。

SELECT s.firstName, d.degreeCode
FROM students s  
INNER JOIN degrees d ON s.studentID = d.studentID
INNER JOIN enrolled e  AND s.studentID = e.studentID 
WHERE s.StudentID NOT IN (
    select studentID 
    FROM students s
    INNER JOIN degrees d ON s.studentID = d.studentID
    INNER JOIN enrolled e  AND s.studentID = e.studentID 
    WHERE e.subjectCode NOT LIKE  '%_15_%'

)