获取表A中不存在的行

时间:2017-03-28 18:17:13

标签: mysql

此查询返回属于计划ID 6004的所有学生的学生ID。

SELECT studentID
FROM 
    (SELECT studentID
     FROM schedule_students
     WHERE scheduleID = '6004') AS A

此查询返回参加计划6004的学生ID

SELECT studentID
FROM 
    (SELECT studentID
     FROM attendance
     WHERE scheduleID = '6004'
       AND status = 1) AS B

我想以某种方式将这些查询放在一起并从A中减去B以获得没有参加时间表的学生ID 6004

2 个答案:

答案 0 :(得分:0)

SELECT studentID 
FROM (SELECT studentID 
      FROM schedule_students 
      WHERE scheduleID = '6004') 
WHERE studentID NOT IN (SELECT studentID
                        FROM (SELECT studentID
                              FROM attendance
                              WHERE scheduleID = '6004'
                                AND status = 1))

看起来有点复杂,但你需要检查哪个不是(NOT IN)其他查询。 :)

答案 1 :(得分:0)

开始查询可以简化为:

SELECT studentID
FROM schedule_students
WHERE scheduleID = '6004'

SELECT studentID
FROM attendance
WHERE scheduleID = '6004'
  AND status = 1

现在简单的方法是使用LEFT JOIN

SELECT ss.studentID
FROM schedule_students ss
LEFT JOIN attendance a 
  ON ss.scheduleID  = a.scheduleID 
 AND ss.studentID = a.studentID
 AND a.status = 1
WHERE ss.sheduleID = '6004'
  AND a.studentID IS NULL