我不太明白......
有人可以告诉我为什么B + C的查询结果不会累加到A?
我首先想到的是,由于拼写错误,下划线(应该是10)在B和C之间不匹配,但在复制/粘贴后我有点无奈。 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 '__________';
答案 0 :(得分:7)
如果mycolumn的某些行包含NULL
个值,那么这些行将从LIKE
和NOT LIKE
子句中排除。
因此,这两个陈述应该是相同的:
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;
答案 1 :(得分:3)
您的mycolumn很可能包含NULL值。 NULL值不会与LIKE或NOT LIKE比较。
答案 2 :(得分:2)
当你添加结果时,它会加起来:
select count(*) from mytable where mycolumn is null;
这背后的原因是null
被视为未定义'。因此,您无法说出您不知道 或不喜欢其他内容。这是未定义的。与null比较,除非使用is null
,否则将始终返回false
。
答案 3 :(得分:1)
您的列包含NULL值。将任何与NULL(甚至是另一个NULL)进行比较时,结果为false
。
所以在你的例子中,有些像你的模式,那些不像你的模式和NULL值,它们都不是。