"不喜欢x"和"喜欢x"不总结?

时间:2014-12-08 09:23:22

标签: sql oracle sql-like oracle12c

我不太明白......

有人可以告诉我为什么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 '__________';

4 个答案:

答案 0 :(得分:7)

如果mycolumn的某些行包含NULL个值,那么这些行将从LIKENOT 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值,它们都不是。