为什么在MySQL中对一列使用NOT LIKE过滤结果列为空的行?

mir*_*rza 2 mysql sql

当我使用此查询时:

SELECT `visitors`.`id`, `visitors`.`ip`, `visitors`.`url`, `visitors`.`time`, `visitors`.`agent`, `visitors`.`reference`
FROM (`visitors`)
WHERE  `reference` NOT LIKE '%bot%'
ORDER BY `id` desc
LIMIT 2000
Run Code Online (Sandbox Code Playgroud)

在结果中,我看不到列为reference空的行.如何使用空引用列创建结果集?

xle*_*ier 6

试试:

SELECT `visitors`.`id`, `visitors`.`ip`, `visitors`.`url`, `visitors`.`time`, `visitors`.`agent`, `visitors`.`reference`
FROM (`visitors`)
WHERE  `reference` NOT LIKE '%bot%' OR `reference` IS NULL
ORDER BY `id` desc
LIMIT 2000
Run Code Online (Sandbox Code Playgroud)

NULL 处理方式与空值的处理方式不同.

  • 如果参考列被合理地索引,则LIKE将比OR更加严重. (2认同)
  • 在'bot'的两端使用通配符将阻止在该列上使用索引.这更有可能"扼杀表现". (2认同)