題目:查詢沒有學全所有課程的同學的信息
分析:沒有學全? 意思是我是不是可以這樣想:student_score 我以用戶id 進行分組,然后拿到每個用戶的課程id count < 課程 student_course 的count 總數
就算是 沒有學全,於是sql來了
SELECT student.* FROM student,
(SELECT studentid, COUNT(*) AS a FROM student_score GROUP BY studentid HAVING a<(SELECT COUNT(*) FROM student_course))b
WHERE student.id = b.studentid
問題來了:這里是根據學生分數表 為基數查詢的,有的學生在分數表里面一條記錄都沒有,沒有學過任何一門課程,那么這樣的群體就查不出來了
於是 要 反向思維 來寫這個:我們先查詢所有學過完整課程的學生,然后我們要沒有學完的學生 就是 not in
SELECT student.* FROM student WHERE student.id NOT IN
(SELECT studentid FROM student_score GROUP BY studentid HAVING COUNT(courseid) = (SELECT COUNT(*) FROM student_course))
查詢的結果集明顯跟上面的不一樣 ....