Mysql 计算列不存在的值';不包含下划线

Mysql 计算列不存在的值';不包含下划线,mysql,sql,escaping,sql-like,Mysql,Sql,Escaping,Sql Like,我有以下查询,我想修改它,以便在我的计数中,它不是电影,而是没有下划线的值。对于第二个计数,我想要包含下划线的值 以下是原始查询: select document , (count(distinct (case when table_name = 'movies' then keyword else null end)) * 100) + (count(distinct (case when table_name = 'movie_summaries' then keyword else

我有以下查询,我想修改它,以便在我的计数中,它不是
电影
,而是没有下划线的值。对于第二个计数,我想要包含下划线的值

以下是原始查询:

select document
, (count(distinct (case when table_name = 'movies' then keyword else null end)) * 100)
    + (count(distinct (case when table_name = 'movie_summaries' then keyword else null end)) * 50)
    as weight
from indexes where keyword in('the', 'hobbit')
group by document
order by weight desc limit 20
前三名权重如下:

  • 三百
  • 二百五十
  • 二百
我修改了它,所以它看起来像这样,但似乎不起作用:

select document
, (count(distinct (case when table_name not like '%_%' then keyword else null end)) * 100)
    + (count(distinct (case when table_name like '%_%' then keyword else null end)) * 50)
    as weight
from indexes where keyword in('the', 'hobbit')
group by document
order by weight desc limit 20
现在,前3个权重是:

  • 一百
  • 一百
  • 一百
是什么导致了这种变化

CREATE TABLE `indexes` (
    `keyword` CHAR(15) NOT NULL,
    `document` INT(10) NOT NULL,
    `position` INT(11) NOT NULL,
    `table_name` CHAR(15) NOT NULL,
    PRIMARY KEY (`keyword`, `document`, `position`, `table_name`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;

核心问题是下划线在类似sql的语言中是一个小丑字符。您应该像
\\
一样对其进行转义


更多详情:

啊,这就解决了!谢谢