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 REGEXP
与 GROUP_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
我一直在努力解决这个问题,但还没有成功。我有两个 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 REGEXP
与 GROUP_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