情景:
我有一个大表(让我们称之为" WordTable"),带有一个单词列表(让我们调用字段" theWord")拥有10,000多条记录。
我还有一个大桌子(让我们称之为#34; MySentences")和一个VARCHAR
字段(让我们调用字段" theSentence&#34 ;)包含许多不同的句子 - 它可能有数百万条记录。
问题:
我可以为MySQL database
编写哪些SQL,以便列出MySentences.theSentence
中哪些记录包含WordTable.theWord
中的任何字词的列表?
由于两个表中都有许多记录,因此使用大量的Like语句是不可行的。 FullText Search会在这里提供一些功能吗?
希望这有助于...顺便说一下,"句子"并不总是需要空格......它可能只是一个字母集合
以下是一些用于说明该场景的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;
答案 0 :(得分:1)
我使用JOIN子句中的LIKE运算符进行查询,该运算符将查找包含单词的任何句子。 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,'%');
答案 1 :(得分:0)
使用类似
的内容将字符串拆分为行SQL split values to multiple rows
你需要一个分隔符char可能是空格_
,但也要小心,可能需要删除像, . : ;
这样的特殊字符
然后您将该结果加入WordTable
并找到哪些字词。