1、问题描述:
1 select FName from teacher 2 where FId not in( 3 select distinct FTeacherId from student 4 )
子查询返回的结果集中包含NULL,导致整条查询语句执行失败。
2、原因:
当和NULL比较(比如a=NULL、a<>NULL),返回结果总是UNKNOWN,所以整条语句执行失败。
如果把"ansi_nulls"设置为"off"(不推荐使用),那么比较结果会是TRUE或者FALSE,这样语句就能执行成功。
1 a not in(1,2,NULL) 2 相当于 3 a<>1 and a<>2 and a<>NULL
a<>NULL结果为"UNKONWN",导致整条语句执行失败
3、解决方法:
加上不为空的限定
1 select distinct FTeacherId from student where FTeacherId<>NULL