mysql是否从其他表中查找包含单词的记录?
情景: 我有一个大表(我们称之为“WordTable”),其中有一个单词列表(我们称该字段为“theWord”),可能有10000多条记录 我还有一个很大的表(我们称之为“mycentenses”),其中有一个mysql是否从其他表中查找包含单词的记录?,mysql,sql,Mysql,Sql,情景: 我有一个大表(我们称之为“WordTable”),其中有一个单词列表(我们称该字段为“theWord”),可能有10000多条记录 我还有一个很大的表(我们称之为“mycentenses”),其中有一个VARCHAR字段(我们称该字段为“thecontence”),其中包含许多不同的句子——它可能有数百万条记录 问题: 我可以为MySQL数据库编写什么样的SQL来提供myentenses中哪些记录的列表。内容包含WordTable中的任何单词。单词 由于两个表中都有许多记录,因此使用大量
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,'%');
您能提供模式、一些示例数据和预期结果吗?这将使其他人更容易帮助你。好建议!我已经更新了这个问题,将示例数据和表包含进来,希望得到的结果是什么?这看起来是一个非常简单的查询。如果一个句子有两个或两个以上的匹配词,你会期待什么?每场比赛一行还是一行?