Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中,equals何时或为什么不是notequals的对立面?_Sql_Oracle_Toad - Fatal编程技术网

在SQL查询中,equals何时或为什么不是notequals的对立面?

在SQL查询中,equals何时或为什么不是notequals的对立面?,sql,oracle,toad,Sql,Oracle,Toad,在包含五条记录的表中,浇头值为“巧克力”,其中两条在MaraschinoCherry列中的值为“是”,其他三条在该列中不包含任何内容(不是“否”-无/空白) 此查询工作正常: select definition from desserts where (Toppings = 'Chocolate') and (MaraschinoCherry <> 'Yes') order by id 你的问题的答案很简单。与NULL值的任何比较(有两个例外)都会产生NULL作为

在包含五条记录的表中,浇头值为“巧克力”,其中两条在MaraschinoCherry列中的值为“是”,其他三条在该列中不包含任何内容(不是“否”-无/空白)

此查询工作正常:

select definition from desserts 
where (Toppings = 'Chocolate') and 
      (MaraschinoCherry <> 'Yes') 
order by id

你的问题的答案很简单。与NULL值的任何比较(有两个例外)都会产生NULL作为结果。所以

MaraschinoCherry = 'Yes'

(函数ISNULL()有点等效,但COALESCE允许更多参数,并且是标准SQL。)


还有其他方法可以解决此问题,例如在定义表时为列指定默认值,将显式比较添加到NULL,将列声明为“NOT NULL”,或者在某些数据库中,通过在比较中重写NULL的行为来违反SQL标准(强烈不建议!)你的问题答案很简单。与NULL值的任何比较(有两个例外)都会产生NULL作为结果。所以

MaraschinoCherry = 'Yes'

(函数ISNULL()有点等效,但COALESCE允许更多参数,并且是标准SQL。)


还有其他方法可以解决此问题,例如在定义表时为列指定默认值,将显式比较添加到NULL,将列声明为“NOT NULL”,或者在某些数据库中,通过在比较中重写NULL的行为来违反SQL标准(强烈不建议!).

再次检查值为“是”的记录。也许它周围有一些空间?尝试使用
运行相同的查询,如“%Yes%”
以确保相同。您确定这两个查询都是“Yes”而不是“Yes”或更糟吗?尝试修剪。MaraschinoCherry的数据类型是什么?如果仅为是/否,则应将其设置为布尔值,并改为存储TRUE或FALSE。提供create table和insert语句以填充该表。空列将被解释为NULL。这可能会对正在发生的事情产生影响。请仔细检查值为“是”的记录。也许它周围有一些空间?尝试使用
运行相同的查询,如“%Yes%”
以确保相同。您确定这两个查询都是“Yes”而不是“Yes”或更糟吗?尝试修剪。MaraschinoCherry的数据类型是什么?如果仅为是/否,则应将其设置为布尔值,并改为存储TRUE或FALSE。提供create table和insert语句以填充该表。空列将被解释为NULL。这可能会对正在发生的事情产生影响。我错过了一些东西。。。如果
MaraschinoCherry
'Yes'
null
,则第一个查询未找到任何内容-由于您描述的null比较行为,
null'Yes'
为false-第二个查询查找两条记录。你怎么从第一个到第三个,从第二个到一个都没有?我错过了一些东西。。。如果
MaraschinoCherry
'Yes'
null
,则第一个查询未找到任何内容-由于您描述的null比较行为,
null'Yes'
为false-第二个查询查找两条记录。你是如何从第一个到第三个,从第二个到一个都没有的?
MaraschinoCherry <> 'Yes'
COALESCE(MaraschinoCherry, 'NO') = 'Yes'