“不喜欢X”和“喜欢X”不总结?
问题描述:
我不太明白...“不喜欢X”和“喜欢X”不总结?
有人请给我一个暗示,为什么查询B + C的结果不会加起来给A吗?
我首先想到的是,由于错字,B和C之间的下划线数量(应该是10)不匹配,但复制/粘贴后我有点无奈。 A的结果高于B + C的总和。
在声明B和C中是否存在某种隐含的不同等,我不知道?
-- statement A
select count(*) from mytable;
-- statement B
select count(*) from mytable where mycolumn like '__________';
-- statement C
select count(*) from mytable where mycolumn not like '__________';
答
如果mycolumn有某些行与NULL
值,则这些将被排除在两者LIKE
和NOT LIKE
条款。
因此,那些2条语句应该是平等的:
SELECT (select count(*) from mytable where mycolumn like '__________')
+ (select count(*) from mytable where mycolumn not like '__________')
+ (select count(*) from mytable where mycolumn IS NULL)
FROM DUAL
-- is equal to
select count(*) from mytable;
答
最有可能你的mycolumn包含NULL值。 NULL值不会与LIKE或NOT LIKE进行比较。
答
当您添加这样的结果,它会积少成多:
select count(*) from mytable where mycolumn is null;
这背后的原因是,null
被认为是“不确定”。所以你不能说什么你不知道是像或不像别的东西。它是未定义的。比较为空,除非使用is null
将始终返回false
。
答
您的列包含NULL值。当你比较什么到NULL(甚至是另一个NULL)时,结果是false
。
所以在你的例子中,有那些像你的模式,那些不像你的模式和NULL值,都不是。
该列中可能有NULL值 – 2014-12-08 09:24:41
噢,伙计们,你太棒了! :)有一句德语说“Vor lauterBäumenden Wald nicht sehen”。谢谢!! – tschlein 2014-12-08 09:30:57
总是被认为是NULL值!如果你今天只学习1件事,这可能是学习的一件事,并永远记住! – tvCa 2014-12-08 13:48:41