mysql - 如何在 MySQL 中查询不包含来自另一个集合的任何成员的集合?

标签 mysql sql select join difference

我想返回一份在一个系上过课但没有在另一个系上过课的学生的列表。这是我的查询,由于某种原因,它的结果是空白的。

 SELECT *
 FROM student
 JOIN transcript
    ON student.id = transcript.studID
 JOIN course
    ON transcript.crsCode = course.crsCode
 WHERE deptId = "CSCI" NOT IN
      (
        SELECT student.name
        FROM student
        JOIN transcript
          ON student.id = transcript.studID
        JOIN course
          ON transcript.crsCode = course.crsCode
        WHERE deptId = "MATH"
);

表格如下:

 Student (id, name, address, status)
 Transcript (studId, crsCode, semester, grade)
 Courses (crsCode, deptId, crsName, descr)

最佳答案

不使用子查询:-

SELECT DISTINCT student.*
FROM student
JOIN transcript
ON student.id = transcript.studID
INNER JOIN course c1
ON transcript.crsCode = c1.crsCode
AND c1.deptId = 'CSCI'
LEFT OUTER JOIN course c2
ON transcript.crsCode = c2.crsCode
AND c2.deptId = 'MATH'
WHERE c2.crsCode IS NULL

这是加入学生对抗成绩单。然后它针对 course 加入两次,一次用于您想要的类(class),一次用于您不想要的类(class)。 WHERE 子句检查您不想要的类(class)是否没有匹配项。

DISTINCT 用于将结果限制为单次出现。这可能不是必需的,但这取决于一个学生是否可以多次完成类(class)。

关于mysql - 如何在 MySQL 中查询不包含来自另一个集合的任何成员的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377223/

相关文章:

php - 删除 php-mysql 结果行中的重复字段

mysql - SQL 查询获取其中的所有行

sql - 使用多个表在 PostgreSQL 中编写 JOIN 查询

mysql - 如何把这个mysql select 改成sql server select 语句?

ios - 在 UITableView 处于编辑模式时选择行

php - 为什么 MySQL ZIP 存档中没有 my-default.ini?

php - 获取表中的所有记录

sql - Flash 可以与 SQL 集成吗?

php - 将选择表单的值保存到mysql数据库

javascript - 动态单选按钮表单 react