这个SQL语法的推理是什么
这个问题的出现是因为在使用PFSeat <> 'call'
比较一个PFSeat值为空的记录时,结果不是TRUE。结果是NULL,因此您看不到这些记录。这是因为NULL不是一个值。
解决方法是使用IS NULL
或IS NOT NULL
来比较NULL值。例如,可以使用PFSeat IS NULL
来查找值为空的记录,使用PFSeat IS NOT NULL
来查找值不为空的记录。这样可以正确地处理NULL值,并得到正确的结果。
另外,您还可以参考Why NULL never compares false to anything in SQL了解更多关于在SQL中比较NULL的原因。
这个问题的出现原因是因为SQL中的语法规定,NULL不是一个值,而是一个属性,表示没有值存在。这是几十年前做出的选择,如果NULL被视为一个值,那么很多查询将产生意料之外的结果。因此,如果SQL语句中的某个部分或参数为NULL,那么结果就会是NULL。
要解决这个问题,我们可以使用IS NULL或IS NOT NULL来检查某个列是否为NULL,而不是直接使用等号或不等号。这样可以避免由于NULL的特殊性而导致的意外结果。在上述例子中,可以使用如下的SQL语句来得到预期的结果:
SELECT * FROM tablename WHERE PFSeat IS NOT NULL AND PFSeat <> 'call';
这样就可以排除掉PFSeat列为NULL或者值为'call'的行,得到符合条件的结果集。通过遵循这种规范,可以更好地处理NULL值,避免产生不必要的困惑和错误。