查询没学过“叶平”老师课的同学的学号、姓名:
我的语句:
SELECT DISTINCT s.id, s.no,s.name FROM student s,teacher t,course c,score
WHERE s.id NOT IN
(SELECT score.student_id
WHERE score.course_id
IN
(SELECT c.id WHERE c.teacher_id IN
(SELECT t.id WHERE t.teacher_name = '叶平')))
为什么没有把学过‘叶平’老师课的给排除掉?
这个没有not的就可以查处来学过‘叶平’老师课程的学生,加了not却没有排除掉这些
SELECT DISTINCT s.id, s.no,s.name FROM student s,teacher t,course c,score
WHERE s.id IN
(SELECT score.student_id
WHERE score.course_id
IN
(SELECT c.id WHERE c.teacher_id IN
(SELECT t.id WHERE t.teacher_name = '叶平')))
不知道为什么?
建议在查询的时候不要省略from,你的where后面里的子查询用的表不是单独的,而是最外层的。你改成这样写试试:
select 列 from 表 where ID not in (select 列 from 表 where ...)
你现在是这样的:
select 列 from 表 where ID not in (select 列 where ...)
多谢,加上from后就解决了
这种sql问题,最好把相关表结构发下,不然别人怎么帮忙看呢