MySQL NOT LIKE 句子返回 "like" 结果

MySQL NOT LIKE sentence returning "like" results

我一直在努力解决这个问题,但还没有成功。我有两个 table,每个都有一个 varchar 列:

Table 1: srch(word varchar)
Table 2: tags (tag varchar)

每个 table 中的值是:

srch: "joining", "tables", "snakes"
tags: "join", "table", "group"

我想要实现的是从搜索 (srch) table 中获取与标签 table 不匹配的单词,但是需要使用通配符来完成。所以,当我用 LIKE 做的时候,它工作正常:

select s.word from srch s, tags t where s.word like concat(t.tag,"%") group by s.word

我需要获取与标签 table 不匹配的单词,在本例中是单词 'snake',因此,如果我尝试使用 NOT LIKE 它不会工作:

select s.word from srch s, tags t where s.word not like concat(t.tag,"%") group by s.word

加上这句话,它returns所有来自srch的值table。

编辑: 示例代码:

CREATE TABLE `srch` (
  `word` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `srch` VALUES ('joining'),('tables'),('snakes');

CREATE TABLE `tags` (
  `tag` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tags` VALUES ('join'),('table'),('group');

这个查询有什么提示吗?谢谢。

您可以通过将 WHERE NOT REGEXPGROUP_CONCAT 结合使用来完成此操作,以组成一个包含所有要过滤掉的标签的字符串。

SELECT word 
FROM srch
WHERE word NOT REGEXP (SELECT GROUP_CONCAT(tag SEPARATOR '|') FROM tags)

不要加入;而是执行子查询 select 并使用 "NOT EXISTS" 检查:

SELECT s.word
FROM srch s
WHERE NOT EXISTS (
  SELECT tag
  FROM tags t 
  WHERE s.word LIKE CONCAT(t.tag,'%')
)

结果:

// snakes