mysql查找包含来自不同表的单词的记录?

时间:2015-11-18 23:19:28

标签: mysql sql

情景:

我有一个大表(让我们称之为" 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;

2 个答案:

答案 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并找到哪些字词。