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

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

最佳答案

一种方法使用聚合来断言给定学生的学科代码仅出现在一年内。

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/

相关文章:

mysql工作台正向工程师错误1064

java - newrelic mysql java插件连接问题

mysql - 连接和输出 - 使用 SELECT DISTINCT

mysql - 模型上的识别和非识别关系

mysql - 如何将子字符串的最后一个字符替换为取决于另一个字段字符串值的另一个字符

python 远程数据库连接mysql

java - 如何解决 'java.sql.SQLException: Column count doesn' t match value count at row 1' 错误?

php - 使用带有 Angular JS 的 mySQL 数据库的用户登录系统?

php - 同一表中每个重复行减少为一行

php - MySQL 数据库中带有 Codeigniter 和 Bootstrap 的下拉菜单