我有下一张表:faculty、faculty_subjects 和 subjects。每个学院都有一个科目列表
如何选择该学院
不需要的科目
?
注意:如果用户添加了一些新主题,那么这个主题在faculty_subjects
表中还没有记录,但它应该显示在SELECT 中。
总而言之 - 从现有的所有科目列表中,我想知道该学院不需要的科目。如何实现?
我正在使用 MySQL 数据库。
附言。如果有更好的标题 - 请编辑。
最佳答案
您可以LEFT JOIN
到 Faculty_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/