我一直在试图解决这个问题,但是还没有成功。我有两个表,每个表都有一个varchar列:
Table 1: srch(word varchar)
Table 2: tags (tag varchar)
每个表中的值是:
srch: "joining", "tables", "snakes"
tags: "join", "table", "group"
我想要实现的是从搜索(srch)表中获取与标签表不匹配的单词,但是需要使用通配符。因此,当我使用LIKE时,它可以正常工作:
select s.word from srch s, tags t where s.word like concat(t.tag,"%") group by s.word
我需要获取与标签表不匹配的单词,在这种情况下,单词为“ snake”,因此,如果我尝试使用NOT LIKE
,它将不起作用:
select s.word from srch s, tags t where s.word not like concat(t.tag,"%") group by s.word
使用这句话,它返回srch表中的所有值。
编辑:示例代码:
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)