select * from course where precourseid not in (select precourseid from course where precourseid is not null);
子查询会返回四个id数字值,我想查询precourseid为null的行的所有信息,如果直接查询select * from course where precourseid is null;这样会得到想要的结果,但是如果用子查询那样就会出错,求解答。
子查询会返回四个id数字值,我想查询precourseid为null的行的所有信息,如果直接查询select * from course where precourseid is null;这样会得到想要的结果,但是如果用子查询那样就会出错,求解答。
null和任何值比较运算都是false
select precourseid from course c2
where precourseid is not null
and c1.precourseid = c2.precourseid
)
1.如果条件判断的结果为false或null,那么该条件判断的最终结果为false(假)。
2.如果条件判断的结果为true,那么那么该条件判断的最终结果为true(真)。你注意你的判断条件not in,由于你找的是precourseid为null的数据。但是SQL语言规定,null值和任何数据做条件判断,结果都为null,也就是最终判断结果为false(假)。当数据库在判断到precourseid为null的数据时,实际上是在判断null not in (...),结果肯定是null。因此,你的那条子查询语句永远也查不出结果来。另外,你注意一下is null这种写法,它实际上就是为了解决任何值和null比较都为null这个问题的,如果你用了=null,那么select * from course where precourseid = null也是查不出来数据的。希望对你有所帮助。