此查询返回属于计划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
答案 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