【问题标题】:"NOT LIKE x" and "LIKE x" doesn't sum up?"NOT LIKE x" 和 "LIKE x" 不能总结?
【发布时间】:2014-12-08 09:23:21
【问题描述】:

我不太明白...

有人能告诉我为什么查询 B + C 的结果不会加到 A 吗?

我首先想到的是,由于拼写错误,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 '__________';

【问题讨论】:

  • 该列中可能有 NULL 值
  • 哦,是的,伙计们,你们太棒了! :) 有一句德语谚语“Vor lauter Bäumen den Wald nicht sehen”。谢谢!!
  • 始终注意 NULL 值!如果您今天只学习一件事,这可能是一件事要学习,并且永远记住!

标签: sql oracle sql-like oracle12c


【解决方案1】:

如果 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;

【讨论】:

    【解决方案2】:

    您的 mycolumn 很可能包含 NULL 值。 NULL 值不会与 LIKE 或 NOT LIKE 进行比较。

    【讨论】:

      【解决方案3】:

      当你把这个结果相加时,它会相加:

      select count(*) from mytable where mycolumn is null;
      

      这背后的原因是null 被认为是“未定义”。所以你不能说你不知道是喜欢,或者不喜欢别的东西。它是未定义的。与 null 比较,除非使用 is null 将始终返回 false。

      【讨论】:

        【解决方案4】:

        您的列包含 NULL 值。当您将 anything 与 NULL(甚至是另一个 NULL)进行比较时,结果是 false。

        因此,在您的示例中,有些与您的模式相似,有些与您的模式不同,而 NULL 值两者都不是。

        【讨论】:

          猜你喜欢
          • 2017-03-15
          • 1970-01-01
          • 1970-01-01
          • 2020-08-31
          • 1970-01-01
          • 1970-01-01
          • 2020-09-12
          • 1970-01-01
          • 2013-05-27
          相关资源
          最近更新 更多