Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql是否从其他表中查找包含单词的记录?_Mysql_Sql - Fatal编程技术网

mysql是否从其他表中查找包含单词的记录?

mysql是否从其他表中查找包含单词的记录?,mysql,sql,Mysql,Sql,情景: 我有一个大表(我们称之为“WordTable”),其中有一个单词列表(我们称该字段为“theWord”),可能有10000多条记录 我还有一个很大的表(我们称之为“mycentenses”),其中有一个VARCHAR字段(我们称该字段为“thecontence”),其中包含许多不同的句子——它可能有数百万条记录 问题: 我可以为MySQL数据库编写什么样的SQL来提供myentenses中哪些记录的列表。内容包含WordTable中的任何单词。单词 由于两个表中都有许多记录,因此使用大量

情景:

我有一个大表(我们称之为“WordTable”),其中有一个单词列表(我们称该字段为“theWord”),可能有10000多条记录

我还有一个很大的表(我们称之为“mycentenses”),其中有一个
VARCHAR
字段(我们称该字段为“thecontence”),其中包含许多不同的句子——它可能有数百万条记录

问题: 我可以为
MySQL数据库
编写什么样的SQL来提供
myentenses中哪些记录的列表。内容
包含
WordTable中的任何单词。单词

由于两个表中都有许多记录,因此使用大量的Like语句是不可行的。全文搜索在这里允许一些功能吗

希望这有助于。。。顺便说一句,“句子”并不总是需要空格。。。它可能只是一堆信件

下面是一些MySQL脚本来说明该场景:

CREATE TABLE `MySentences` (
  `id` int(11) NOT NULL,
  `theSentence` varchar(1000) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

INSERT INTO `MySentences` (`id`, `theSentence`) VALUES
(1, 'hereisatestsentence'),
(2, 'asdfasdfadsf'),
(3, 'today is a blue sky'),
(4, 'jk2k2lkjskylkjdsf'),
(5, 'ddddddd'),
(6, 'nothing'),
(7, 'sometest');

CREATE TABLE `WordTable` (
  `id` int(11) NOT NULL,
  `theWord` varchar(50) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

INSERT INTO `WordTable` (`id`, `theWord`) VALUES
(1, 'test'),
(2, 'house'),
(3, 'blue'),
(4, 'sky');

ALTER TABLE `MySentences`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `WordTable`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `MySentences`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8;

ALTER TABLE `WordTable`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

您可以使用如下方式将字符串拆分为行

您需要一个分隔字符,可能是空格
,但也要小心,可能需要删除特殊字符,如
,:

然后将该结果连接到
单词表中,并查找其中的单词。

我使用join子句中的运算符进行了查询,该运算符将查找包含单词的任何句子。LIKE运算符使用通配符
%
,它将匹配任何内容

SELECT
    A.theSentence, B.theWord
FROM
    MySentences A
    INNER JOIN WordTable B ON A.theSentence LIKE CONCAT('%',B.theWord,'%');
如果您只对匹配的句子感兴趣,可以使用
DISTINCT
操作符查看不同的结果:

SELECT
    DISTINCT A.theSentence
FROM
    MySentences A
    INNER JOIN WordTable B ON A.theSentence LIKE CONCAT('%',B.theWord,'%');

您能提供模式、一些示例数据和预期结果吗?这将使其他人更容易帮助你。好建议!我已经更新了这个问题,将示例数据和表包含进来,希望得到的结果是什么?这看起来是一个非常简单的查询。如果一个句子有两个或两个以上的匹配词,你会期待什么?每场比赛一行还是一行?