【问题标题】:mysql not like does not workmysql不喜欢不工作
【发布时间】:2014-02-13 21:42:11
【问题描述】:

我对在 where 条件下使用“不喜欢”的 mysql 选择有问题。表中有 15k 条记录。 3k 记录在 col1 列中的值为“test”。

这个选择工作正常:

select 
    *
from
    `table`
where
    `col1` like 'test'

已选择 3000 行。这是正确的。

但如果我尝试这个选择:

select
   *
from
   `table`
where
   `col1` not like 'test'

选择了 0 行,而我预计 12000 行。

如果有任何想法,我将不胜感激?

【问题讨论】:

  • 你能在 sqlfiddle 做一个小例子吗?
  • 不确定,但请尝试两个不同的查询,例如 col1 like '%test%'col1 NOT like '%test%'
  • 对我来说很好:sqlfiddle.com/#!2/59eb8e/3
  • 它在 sqlfiddle 上运行良好,但在我的数据库中仍然无法运行。

标签: mysql select sql-like


【解决方案1】:

所以我解决了我的问题:

where ifnull(column,'') not like 'value'

【讨论】:

  • 在回答一个老问题时,如果您包含一些上下文来解释您的答案如何提供帮助,那么您的答案将对其他 StackOverflow 用户更有用,特别是对于已经有一个已接受答案的问题。请参阅:How do I write a good answer
【解决方案2】:

所以我解决了。问题出在数据上,而不是在请求上。我没有意识到not like 条件不适用于NULL 值。

http://sqlfiddle.com/#!2/17270/2

【讨论】:

  • 我建立了一个快速周转:选择 ... 其中 COALESCE(field, "****") 不像“test”。这也将包括空值。
【解决方案3】:

可能缺少%

select
   *
from
   `table`
where
   `col1` not like '%test%'

尝试不使用`

select
   *
from
   table
where
   col1 not like '%test%'

【讨论】:

  • 第二种方案无法编译。
  • 您的请求不会使用任何索引,因为它将探索表中的每一行。这将非常缓慢。
【解决方案4】:

如果您在查询中进行精确比较,可以使用NOT EQUAL

select
   *
from
   `table`
where
   `col1` != 'test'

【讨论】:

  • 感谢您的想法,但没有奏效。 0 行的相同结果。
【解决方案5】:

试试这个

SHOW TABLES WHERE col1 NOT LIKE '%test%'

【讨论】:

    【解决方案6】:

    试试这个

    select * from table where col1 NOT LIKE '%test%';
    

    【讨论】:

    • 如果他和LIKE进行完全匹配,他为什么不应该和NOT LIKE进行完全匹配?
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2011-07-17
    • 1970-01-01
    • 2021-07-18
    • 2019-07-03
    • 2014-03-30
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多