繁体   English   中英

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

[英]How to return rows in one table whose field contains a string from any row in another table?

我在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;

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

全文匹配似乎只适用于字符串,而不适用于另一个表中的选择。 至于LIKE和REGEXP,它们似乎花了很长时间,因为我的词典中大约有50万行句子和5万行单词。

一种选择是在程序中逐行浏览字典并在每行上调用一次select,但我宁愿在单个SQL语句中进行选择。

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

谢谢!

尝试这样的事情-

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM