如何在一个表中返回一行,其字段包含来自另一个表中任何行的字符串



我在mySQL 5.6中具有下表结构:

CREATE TABLE `dictionary` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `word` varchar(80) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `word` (`word`)
) ENGINE=InnoDB;
CREATE TABLE `sentences` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sentence` varchar(254) NOT NULL,
  PRIMARY KEY (`id`),
  FULLTEXT KEY `sentencefulltext` (`sentence`)
) ENGINE=InnoDB;

我想返回所有包含我词典中任何单词的句子。我真的不在乎单词边界,这可能是一个基本的子字符串。

fultText匹配似乎仅与字符串一起使用,而不是从另一个表中选择。至于like和regexp,它们似乎已经花了很长时间了,因为我的字典中有大约500k行句子和50k行的单词。

一个选项是通过程序中的行逐行浏览字典,并在每一行中调用选择,但我宁愿在单个SQL语句中进行。

如果有人有任何想法,请分享。

谢谢!

尝试类似的东西 -

 SELECT *
      FROM `sentences`,'dictionary'
     WHERE INSTR(word,''+sentence+'') > 0

当您使用%符号之类的时 - 没有索引,这就是为什么它太慢,因此您可能需要全文搜索:

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

最新更新