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;这样会得到想要的结果,但是如果用子查询那样就会出错,求解答。

解决方案 »

  1.   

    http://www.cnblogs.com/killkill/archive/2010/09/04/1817266.html
      

  2.   

    哦,原来是个三值运算的问题。
    null和任何值比较运算都是false
      

  3.   

    看看这个,呵呵。select * from course c1 where not exists (
      select precourseid from course c2
      where precourseid is not null
      and c1.precourseid = c2.precourseid
    )
      

  4.   

    还是要好好学习SQL语言本身的特性啊。答案在这里:这是你想要查询的数据:select * from course where precourseid is null;这是你用的另一种方法:select * from course where precourseid not in (select precourseid from course where precourseid is not null);注意了,在SQL中,where子句中的筛选条件有以下限制:
    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也是查不出来数据的。希望对你有所帮助。