mysql - 如何使用 NOT 语法获取记录?

标签 mysql sql database

我有下一张表:faculty、faculty_subjects 和 subjects。每个学院都有一个科目列表

db schema

如何选择该学院不需要的科目

注意:如果用户添加了一些新主题,那么这个主题在faculty_subjects 表中还没有记录,但它应该显示在SELECT 中。

总而言之 - 从现有的所有科目列表中,我想知道该学院不需要的科目。如何实现?

我正在使用 MySQL 数据库。

附言。如果有更好的标题 - 请编辑。

最佳答案

您可以LEFT JOINFaculty_Subject,在连接谓词中使用您感兴趣的特定 Faculty ID,然后使用WHERE 谓词,所以你只剩下你想要的主题:

SELECT  s.id, s.Name
FROM    Subject AS s
        LEFT JOIN Faculty_Subject AS fs
            ON fs.Subject_idSubject = s.ID
            AND fs.Faculty_idFaculty = 1
WHERE   fs.id IS NULL;

注意,我通常建议使用 NOT EXISTS 语法:

SELECT  s.id, s.Name
FROM    Subject AS s
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    Faculty_Subject AS fs
            WHERE   fs.Subject_idSubject = s.ID
            AND     fs.Faculty_idFaculty = 1
        );

我认为这对读者来说更符合逻辑,但是 in MySQL LEFT JOIN/IS NULL performs better than NOT EXISTS

关于mysql - 如何使用 NOT 语法获取记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106330/

相关文章:

sql - ODCIAggregateMerge 没有 parallel_enabled

sql - 从表中的条目创建列

Python:在数据库中存储对象状态的最佳方法?

带 "default values"的 SQL GROUP BY

php - 图像没有出现在 MYSQL 数据库中

PHP Mysql 从一天中的两个日期时间计算每天的总飞行小时数

用于处理多个连接的 PHP 脚本

mysql - mysql数据库逻辑是否适合查询?

mysql - 在MySQL中插入时自动更改日期格式

javascript - 将日期插入 mysql 数据库 [我正在使用 php 和 xampp mysql 数据库]